大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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环境版本说明。
操作系统:统信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传送门 (源码)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179805.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...