Live555离线视频转RTSP说明文档
1.下载安装包
2. 解压
执行命令:
tar -zxvf live555.tar.gz
tar -zxvf live.tar.gz
cd live/
3. 编译并安装
执行命令:
./genMakefiles linux #注意后面这个"linux"参数会根据当前文件夹下config.<后缀>获取配置,请使用与服务器架构匹配的参数。
make -j
若编译过程中报错:struct std::atomic_flag has no member named 'test' 修改config.linux文件:
CPLUSPLUS_FLAGS = (原有配置项) -std=c++2a
最后就会在当前目录下生成mediaServer 文件夹,有一个live555MediaServer可执行文件
4. 运行
将以上步骤编译生成的live555MediaServer可执行文件拷贝至解压live555.tar.gz的文件夹 并将所有的视频文件也放在该文件夹下。
./startNvr.sh ${port} ${nums}
# ${port}:开启的端口号
# ${nums}:从${port}开始创建nums+1个视频流
# 检查是否起流成功 执行以下命令,若出现./live555MediaServer XXX说明正常起流
ps -ef | grep live555MediaServer
rtsp流地址格式如下:
rtsp://${ip_address}:${port}/${h264_file}
# ${ip_address}:起流的机器ip地址
# ${port}:端口
# ${h264_file}:放置在与live555MediaServer和startNvr.sh文件同目录的h264视频文件
5. 视频文件格式转换
根据提示当前只支持部分视频格式,并不支持.mp4后缀的文件,但可以通过ffmpeg转换生成ffmpeg安装教程,如下所示为MP4转换为h.264命令:
ffmpeg -i test.mp4 -vcodec h264 -bf 0 -g 25 -r 10 -s 1280*720 -an -f h264 test1.264
//-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制 -an关闭音频, -r 指定帧率
补充
1. 视频循环推流
按照以下提示修改文件可以使自主搭建的rtsp循环推流,如果不作更改,则为有限的视频流
在liveMedia库下的ByteStreamFileSource.cpp文件中的95行,找到
void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0))
{
handleClosure();
return;
}
更改为
void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0)) {
//handleClosure();**
//return;**
fseek(fFid, 0, SEEK_SET);
}
2. 高分辨率帧花屏
在使用Live555进行拉流时,出现”The input frame data was too large for our buffer“问题,导致丢帧。
解决办法:
在mediaServer的DynamicRTSPServer.cpp文件,修改每一处OutPacketBuffer::maxSize的值,目前更改到800000。
源代码修改后都需要重新编译并安装live555.
./genMakefiles <os-platform>
make