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

QT 实现 RTSP 视频流服务器[通俗易懂]uos操作系统中使用QT开发RTSP视频流服务器,以下的实现方式使用的是单播方式。可以通过自己开发的rtsp服务器将摄像头的数据推送到服务器中,其他用户可以通过访问视频流地址,直接访问摄像头的内容,也就是通常说的摄像头直播。本篇文章使用开源框架live555开发一个属于自己的视频流服务器。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

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

安装环境依赖

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

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

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 视频流服务器[通俗易懂]

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

编码

#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开始。

./RTSPServer -i 0

播放视频:

使用播放工具mplayer

安装播放工具:

sudo apt install mplayer

播放rtsp地址:

mplayer rtsp://127.0.1.1:8554/live

git传送门 (源码)

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HikariPool-1 – Thread starvation or clock leap detected与Hikari数据源配置

    HikariPool-1 – Thread starvation or clock leap detected与Hikari数据源配置2019-12-0412:10:51.494WARN14480—[l-1housekeeper]com.zaxxer.hikari.pool.HikariPool:HikariPool-1-Threadstarvationorclockleapdetected(housekeeperdelta=7m48s317ms362µs591ns)….

    2022年6月23日
    481
  • 广东汕尾电信稳定dns服务器,广东电信的DNS是多少?

    广东汕尾电信稳定dns服务器,广东电信的DNS是多少?广东省广州市(中国电信)首选DNS:202.96.128.86备份DNS:202.96.128.166广东省汕尾市(中国电信)首选DNS:202.96.128.166备份DNS:202.96.128.86广东省汕头市(中国电信)备份DNS:202.96.128.166广东省河源市(中国电信)首选DNS:202.96.128.166备份DNS:202.96.128.86广东省深圳市(中国电…

    2022年7月11日
    46
  • 分解质因数

    分解质因数分解质因数

    2022年4月24日
    55
  • 笔记视频_微信里笔记怎么编辑

    笔记视频_微信里笔记怎么编辑日常开发小笔记(this小操作)

    2022年4月21日
    49
  • ziw文件用什么打开_html文件怎么打开

    ziw文件用什么打开_html文件怎么打开方法1:.ziw格式文件是为知笔记的文本文档,可以用为知笔记打开,直接去为知笔记官方网站下载就可以了,然后该软件的试用期是100天,不过它是经过邮箱注册的,并且没有验证邮箱这一步,所以你在100天之后可以换一个邮箱就可以了,比如之前用QQ邮箱,下次用163邮箱,另外它不会验证邮箱,所以你可以随意伪造一个邮箱登录方法2:直接把文件名后缀名改成.zip,然后解压,解压成功之后生成的是html网页,直接点击index.html就可以在浏览器中打开文件了,里面的图片不要删除,它们是index.html网页要用

    2022年10月12日
    2
  • sap concur报销系统_SAP NetWeaver

    sap concur报销系统_SAP NetWeaver启动orion后,注册用户登录后,默认的地址是localhost:8080/edit/edit.html,这是页面提示了accessdenied,google了很久,有蛮多人遇到此问题,有人说需要把地址该问localhost:8080/webide/index.html,但我修改后还是会报此错误,后面看了有人说需要更新JDK的版本,后面下了JDK8,按装完成后,再启动orion,输入地址ocal…

    2022年9月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号