前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT 实现 RTSP 视频流服务器[通俗易懂]

QT 实现 RTSP 视频流服务器[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-01 16:01:16
3.7K0
发布2022-11-01 16:01:16
举报
文章被收录于专栏:全栈程序员必看

uos操作系统中使用QT开发RTSP 视频流服务器,以下的实现方式使用的是单播方式,除了单播模式还有多播模式。

可以通过自己开发的rtsp服务器将摄像头的数据时时推送到服务器中,其他用户可以通过访问视频流地址rtsp://127.0.1.1:8554/live,直接访问摄像头播放的内容,也就是通常说的摄像头直播。本篇文章使用开源框架live555开发一个属于自己的视频流服务器。

安装环境依赖

live555的使用需要较多的环境依赖,一下安装都是编译依赖相关内容。

由于只是一个小demo,因此没有做成debian的依赖关系,不过我们可以通过以下命令安装。

代码语言:javascript
复制
sudo apt install liblivemedia-dev
sudo apt install libbasicusageenvironment1
sudo apt install libgroupsock8
sudo apt install libusageenvironment3
sudo apt install libasound2-dev
sudo apt install libx264-dev
sudo apt install libfaac-dev

编译环境

qt环境版本说明。

QT 实现 RTSP 视频流服务器[通俗易懂]
QT 实现 RTSP 视频流服务器[通俗易懂]

操作系统:统信uos操作系统

编码

代码语言:javascript
复制
#include "mainwindow.h"
#include <QApplication>
#include <QCameraInfo>
#include "live/V4l2H264DevUnicastServerMediaSubsession.h"
#include "live/V4l2H264DevMulticastServerMediaSubsession.h"
#include "live/AlsaAACDevUnicastServerMediaSubsession.h"
#include "live/AlsaAACDevMulticastServerMediaSubsession.h"

int main(int argc, char* argv[])
{
   // 获取所有的摄像头信息
    QList<QCameraInfo> lists = QCameraInfo::availableCameras();
    foreach (auto item, lists) {
        qInfo() << item.description();
        qInfo() << item.deviceName();
    }

    int port = 8554;        // 端口号
    int videoWidth = 320;    // 宽高
    int videoHeight = 240;    
    int videoFps = 15;      // 帧率
    int index = -1;        // 设备序号,因为有可能有多个设备。
    std::string audioSamplingFmt("s16le");
    std::string deviceName;

    char c;

    if (argc == 1) {
        return 0;
    }
    // 程序参数解析
    while ((c = getopt(argc, argv, "i:p")) != -1) {
        switch (c) {
            case 'p':    // 修改监听端口号
                port = atoi(optarg);
                printf("port: %d\n", port);
                break;

            case 'i':    // 设置设备序号,设备名字使用QCameraInfo获取
                index = atoi(optarg);
                printf("index: %d\n", port);
                break;
        }
    }
    if (-1 == index || index >= lists.size()) {
        printf("please select device index: %d\n", port);
        exit(-1);
    }
    //  通过序号获取设备名字
    deviceName = lists.at(index).deviceName().toStdString();
    TaskScheduler* scheduler = BasicTaskScheduler::createNew();
    UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);
    // 创建rtsp服务器
    RTSPServer* rtspServer = RTSPServer::createNew(*env, port);
    if (rtspServer == nullptr) {
        *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
        return -1;
    }

    ServerMediaSession* sms;

    sms = ServerMediaSession::createNew(*env, "live", "live rtsp server",
                                        "live rtsp server");

    if (!deviceName.empty())
        sms->addSubsession(V4l2H264DevUnicastServerMediaSubsession::createNew(
            *env, deviceName.c_str(), True, videoWidth, videoHeight, videoFps));

    rtspServer->addServerMediaSession(sms);

    char* url = rtspServer->rtspURL(sms);
    *env << "Play this stream using the URL \"" << url << "\"\n";
    delete[] url;

    env->taskScheduler().doEventLoop();

    return 0;
}

服务器运行

-i 表示第几个设备,从0开始。

代码语言:javascript
复制
./RTSPServer -i 0

播放视频:

使用播放工具mplayer

安装播放工具:

代码语言:javascript
复制
sudo apt install mplayer

播放rtsp地址:

代码语言:javascript
复制
mplayer rtsp://127.0.1.1:8554/live

git传送门 (源码)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179805.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装环境依赖
  • 编译环境
  • 编码
  • 服务器运行
  • 播放视频:
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档