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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 教你在Ubuntu上体验Mac风格

    教你在Ubuntu上体验Mac风格

    2021年9月16日
    57
  • 优惠券设计及流程_优惠券怎么设计

    优惠券设计及流程_优惠券怎么设计在整个APP开发产品发展的整个周期中,运营活动必不可少,而发放优惠券已成为运营活动的一种基本形式,而关于优惠券设计的整体流程尤为重要。接下来,分享一下自己的经验,希望对大家有帮助,感谢支持!整体架构

    2022年8月1日
    5
  • 中国移动apn接入点选哪个网速快(中国移动数据接入点怎么设置)

    中国移动有cmwap,cmnet和LTE三种网络接入点。这三个网络接入点的特点各有不同。其中LTE就是指4G,网络速度相较其他两种接入点速度更快,流量损耗速度也更快。具体介绍如下:1、CMNET可以获得完全的Internet访问权。我们通过CMWAP只能访问WAP网站。CMWAP使用HTTP代理协议和WAP网关协议可以访问到Internet。CMNET则适用于所有协议,它也是标准的TCP/IP协议…

    2022年4月12日
    507
  • totalcmd工具的主要功能_windows cmd 命令大全

    totalcmd工具的主要功能_windows cmd 命令大全一、Totalcmd配合7-Zip进行压缩、解压缩下载7z文件。可去官网下载安装版文件,再解压,只提取其中的7z.dll文件和7zG.exe文件再将其放在totalcmd\Utilities\7-Zip目录下。(注Utilities是我自己建的一个文件夹,用来存放一些可直接调用的小工具。)说明:虽说7-Zip有个叫7za.exe的命令行工具,但显示效果不佳…

    2025年8月3日
    2
  • nginx与tomcat配合部署web工程接口访问报414 Request-URI Too Large错误

    nginx与tomcat配合部署web工程接口访问报414 Request-URI Too Large错误首先查看nginx配置nginx.conf调节http模块以下参数值client_header_buffer_size512k;large_client_header_buffers4512k;如接口正常访问项目即修改有效;若报出"(104: Connection reset by peer) while connecting to upstream"继续检查tomcat下…

    2022年6月4日
    69
  • 几何菱形包是什么牌子_菱形数学

    几何菱形包是什么牌子_菱形数学首页题库状态天梯课程比赛排行榜武则天 题目描述我的提交所有提交换下一题10049:凯的菱形时间限制:1000MS内存限制:131072KB提交总数:36AC总数:20问题描述打完一波农药,安琪拉感叹道:凯呀凯,你真是又帅又厉害!!!凯是真帅,他的菱形也是帅:最外层是字母A,然后里一层是B,再里一层是C。。。输入格式第一行输入整数n(1&lt…

    2022年9月1日
    2

发表回复

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

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