Ubuntu搭建RTSP推流:ffmpeg+live555+VLC

Ubuntu搭建RTSP推流:ffmpeg+live555+VLC

相关背景:

例如:数字人直播、流媒体


搭建live555问题描述

testRTSPClient.cpp:64:49: error: use of deleted function ‘std::atomic<char>::atomic(const std::atomic<char>&)’ 64 | EventLoopWatchVariable eventLoopWatchVariable = 0;

解决方案:

//修改前
EventLoopWatchVariable eventLoopWatchVariable = 0;
//修改后
EventLoopWatchVariable eventLoopWatchVariable = {0};

感谢https://blog.youkuaiyun.com/weixin_65482428/article/details/140628201


include/TLSState.hh:34:10: fatal error: openssl/ssl.h: No such file or directory
解决方案:

@Override
	public void run() {
		bytes = mmInStream.read(buffer);
		mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
	}

BasicTaskScheduler.cpp: In member function ‘virtual void BasicTaskScheduler::SingleStep(unsigned int)’: BasicTaskScheduler.cpp:191:40: error: ‘struct std::atomic_flag’ has no member named ‘test’ 191 | if (fTriggersAwaitingHandling[i].test()) {
解决方案:

报错“test”: 不是“std::atomic_flag”的成员”,找到定义所在BasicUsageEnvironment/include/BasicUsageEnvironment0.hh,添加宏定义 #define NO_STD_LIB NO_STD_LIB

感谢https://blog.youkuaiyun.com/weixin_65482428/article/details/140628201

### Ubuntu RTSP Live555 与拉的实现方法 在 Ubuntu 系统上使用 RTSP 协议和 live555 库进行视频数据的或拉操作,可以通过以下方式实现。Live555 是一个开源库,支持 RTSP 协议的实现,能够用于构建 RTSP 服务器和客户端。 #### 1. 安装依赖 首先需要安装必要的依赖项,包括编译工具链和 OpenSSL 库。OpenSSL 是 Live555 的必要依赖,用于加密和解密功能。 ```bash sudo apt update sudo apt install build-essential libssl-dev ``` #### 2. 下载并解压 Live555 源码 下载 Live555 的最新源码包,并解压到目标目录。 ```bash mkdir ~/UbuntuTest cd ~/UbuntuTest wget http://live555.com/liveMedia/public/live555-latest.tar.gz tar -zxvf live555-latest.tar.gz cd live ``` #### 3. 编译 Live555 源码 进入解压后的 Live555 目录,运行以下命令进行编译: ```bash ./genMakefiles linux make ``` 这将生成一系列可执行文件,其中包括 `testOnDemandRTSPServer` 和 `live555ProxyServer` 等工具[^3]。 #### 4. 配置 RTSP 为了实现 RTSP ,可以使用 Live555 提供的示例程序 `testOnDemandRTSPServer`。该程序可以从文件或设备中读取媒体数据,并通过 RTSP 协议进行广播。 ##### 创建 FIFO 管道 如果需要从实时数据(如摄像头或 H264 编码器)中读取数据,可以创建一个 FIFO 管道: ```bash mkfifo /tmp/h264.fifo ``` ##### 启动 RTSP 服务器 运行以下命令启动 RTSP 服务器,指定 FIFO 管道作为输入源: ```bash ./testOnDemandRTSPServer --verbose --port 8554 --auth-file ./users.txt file:/tmp/h264.fifo ``` 上述命令将启动一个 RTSP 服务器,监听端口为 8554,并提供名为 `/tmp/h264.fifo` 的 H264 数据[^1]。 #### 5. 配置 RTSP 要从 RTSP 服务器拉取视频数据,可以使用 FFmpegVLC 等工具。 ##### 使用 FFmpeg 以下命令将从 RTSP 服务器拉取 H264 数据并保存为 MP4 文件: ```bash ffmpeg -i rtsp://<server-ip>:8554/h264.fifo -c copy output.mp4 ``` ##### 使用 VLC 也可以使用 VLC 播放器直接播放 RTSP : ```bash vlc rtsp://<server-ip>:8554/h264.fifo ``` #### 6. 示例代码:C++ 实现 RTSP 如果需要自定义 RTSP 逻辑,可以参考 Live555 的 C++ 示例代码。以下是一个简单的 RTSP 程序框架: ```cpp #include "liveMedia.hh" #include "BasicUsageEnvironment.hh" int main() { TaskScheduler* scheduler = BasicTaskScheduler::createNew(); UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler); // 创建 RTSP 服务器 RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, NULL); if (rtspServer == NULL) { *env << "Failed to create RTSP server\n"; return 1; } // 添加 H264 char const* streamName = "h264Stream"; ServerMediaSession* sms = ServerMediaSession::createNew(*env, streamName, streamName, "H264 Video"); FramedSource* videoSource = H264FileServerMediaSubsession::createNew(*env, "test.h264", False); sms->addSubsession(videoSource); rtspServer->addServerMediaSession(sms); env->taskScheduler().doEventLoop(); // 进入事件循环 return 0; } ``` 上述代码创建了一个 RTSP 服务器,并添加了一个基于 H264 文件的媒体会话[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值