本地开发环境成功得rstp部署推送srs服务器推送成功 但是部署在linux服务器下得时候失败了 记录一下排查流程步骤 本人流媒体ffmpeg 0基础新学 记录下备忘
D:/ffmpeg-20200315-c467328-win64-static/bin/ffmpeg -rtsp_transport tcp -i rtsp:///[username]:[password]@[ip]/h264/ch1/main/av_stream -f flv -r 25 -g 5 -vcodec h264 -b:v 200k -s 640x360 -tune -zerolatency -an rtmp://[ip]:[port]/live/compressed_push333_7
具体流程
摄像头为海康威视摄像头,在window环境下开发,在window下开启了centos7虚拟机 并在虚拟机上搭建srs流媒体服务器,开发调试完成后准备在srs所在虚拟机上进行部署
部署后发现ffmpeg拉流日志正常 推流出现段错误
暂时排除问题
ffmpeg推流语句应该没有问题 在windows环境下实验过是通得
网络问题 摄像头 推流 srs 程序 回调 网络均能ping通
window宿主计算机上推流20+没有问题 在推流时开启虚拟机监控没有发现异常 所以应该不是内存溢出
尝试定位问题
普通压缩命令测试
ffmpeg -i lyb.Ep22.2015.HD720P.X264.AAC.Mandarin.CHS.Mp4Ba.mp4 -acodec copy -vcodec copy -f flv test.flv
结果成功
ffmpeg version 3.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
configuration: --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-shared --enable-zlib --enable-bzlib --enable-libmp3lame --enable-libx264 --enable-pic --enable-libfaac
libavutil 55. 27.100 / 55. 27.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 40.101 / 57. 40.101
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 46.102 / 6. 46.102
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'lyb.Ep22.2015.HD720P.X264.AAC.Mandarin.CHS.Mp4Ba.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2015-09-29 17:09:29
Duration: 00:44:30.04, start: 0.000000, bitrate: 2697 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x714 [SAR 1:1 DAR 640:357], 2565 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2015-09-29 17:09:29
handler_name : 264:fps=25.0@GPAC0.5.1-DEV-rev4929
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2015-09-29 10:13:23
handler_name : GPAC ISO Audio Handler
[flv @ 0x1ae6640] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Last message repeated 1 times
Output #0, flv, to 'test.flv':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
encoder : Lavf57.40.101
Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x714 [SAR 1:1 DAR 640:357], q=2-31, 2565 kb/s, 25 fps, 25 tbr, 1k tbn, 25k tbc (default)
Metadata:
creation_time : 2015-09-29 17:09:29
handler_name : 264:fps=25.0@GPAC0.5.1-DEV-rev4929
Stream #0:1(eng): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, 128 kb/s (default)
Metadata:
creation_time : 2015-09-29 10:13:23
handler_name : GPAC ISO Audio Handler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=66751 fps=9010 q=-1.0 Lsize= 881037kB time=00:44:30.03 bitrate=2703.1kbits/s speed= 360x
video:836104kB audio:41719kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.366043%
将输出端改为srs服务器
ffmpeg -i lyb.Ep22.2015.HD720P.X264.AAC.Mandarin.CHS.Mp4Ba.mp4 -acodec copy -vcodec copy -f flv rtmp://[srsip]:[srsport]/live/compressed_linux
成功 排除输出端问题
输入端采取备用流
ffmpeg -i rtsp://[username]:[password]@[ip]/mpeg4/ch1/sub/av_stream -acodec copy -vcodec copy -f flv -r 25 -g 5 -b:v 400k -s 640x360 -tune -zerolatency -an -f flv rtmp://[srsip]:[srsport]/live/compressed_linux
推送成功
推送流同为rtsp流 区别在于编码格式
mpeg4 与 h264 得区别
失败原因应该为这个
暂时用替换流得方案解决问题
h264待解决
服务器安装x264版本为
x264-snapshot-20120718-2245-stable.tar.bz2
ffmpeg安装报错:WARNING: using libx264 without pkg-config
采取解决方案为:
因为yum安装x264时,没有自动给我们加入环境变量,执行:export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH解决
ffmpeg -rtsp_transport tcp -i rtsp://[username]:[password]@[ip]:[port]/h264/ch1/main/av_stream -vcodec libx264 -pix_fmt yuvj420p -f flv rtmp://[srsip]:[srsport]/live/compressed_linux
源推流语句失败
尝试静态文件修改编码推送
ffmpeg -i lyb.Ep22.2015.HD720P.X264.AAC.Mandarin.CHS.Mp4Ba.mp4 -vcodec libx264 -f flv rtmp://[srsip]:[srsport]/live/compressed_linux
推流失败
基本确定为编码器问题
在网上搜了半天
尝试性执行
ffmpeg -re -rtsp_transport tcp -i rtsp://[username]:[password]@[ip]:[port]/h264/ch1/main/av_stream -f flv rtmp://[srsip]:[srsport]/live/compressed_linux
竟然成功了
就这样吧 爱咋咋