先看拉取的视频流效果:
代码如下:
一开始打算使用python写多路视频推流,但在ubuntu系统上搞了好久就是搞不定openh264导致的错误,然后改用c++了,代码如下,我这里推了两路视频流,一路是网络摄像头,另一路是MP4视频文件,环境还是之前的,可参考以下两篇博文:
Docker中创建nginx-rtmp流媒体服务器
Docker中使用nginx-rtmp推拉网络摄像头视频流
#include <iostream>
#include <thread>
void executeCommand(const char* command) {
int result = std::system(command);
if (result == 0) {
std::cout << "Command executed successfully." << std::endl;
} else {
std::cerr << "Command execution failed." << std::endl;
}
}
int main() {
// 构建推流命令
const char* command1 = "ffmpeg -use_wallclock_as_timestamps 1 -rtsp_transport tcp -i rtsp://admin:admin@网络摄象头ip -c:v h264 -b:v 1000k -c:a aac -ar 44100 -f flv rtmp://流媒体服务器IP:1935/stream/example1";
// 构建另一个推流命令
const char* command2 = "ffmpeg -re -stream_loop -1 -i ./5-2.mp4 -vcodec copy -acodec aac -ar 44100 -f flv rtmp://流媒体服务器IP:1935/stream/example2";
// 使用线程同时执行两个命令
std::thread thread1(executeCommand, command1);
std::thread thread2(executeCommand, command2);
// 等待线程执行完毕
thread1.join();
thread2.join();
return 0;
}
编译命令:
g++ -o multffmpeg-test multffmpeg-test.cpp -pthread
运行:
./multffmpeg-test