https://www.bbsmax.com/A/6pdDVZXqJw/
本文轉自EasyDarwin團隊成員Alex的博客:http://blog.csdn.net/cai6811376/article/details/74783269
需求
在做EasyDSS開發時,總是在測試推流效果。
當然,可以使用libEasyRTMP進行推流測試。
有時候,我們想使用OBS進行推流測試,也可以,這很好。
以及其他RTMP推流工具。
但是,別忘了,還有ffmpeg這個神器。ffmpeg可以獲取各種視頻流,並推送給EasyDSS RTMP流媒體服務器。
比如,拉取攝像機RTSP流,推送給EasyDSS,命令
ffmpeg -i rtsp://username:password@ip:port/xxxxxxx -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test
當然,這個命令限於攝像機提供的就為H.264+AAC的碼流,若不是
則將-vcodec copy
改為-vcodec libx264
,-acodec copy
改為-acodec aac
若是,我們想用ffmpeg讀取文件進行RTMP推送呢,當然,您可以選擇OBS,但是,畢竟,ffmpeg比OBS更輕量,命令在此
ffmpeg -i test.h264 -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test
-vcodec和-acodec按需更改同拉取RTSP流。
這樣可以滿足我們推送文件到EasyDSS的願望。
但是。。。。。
ffmpeg推流的效果經常不如人意,經常出現播放畫面慢、音視頻不同步、HLS直播不穩定等各種問題?
解決
當然有解決辦法
ffmpeg -re -stream_loop -1 -i test.h264 -vcodec copy -acodec copy -f flv -y rtmp://easydssip:easydssport/live/test
加了一個-re
這是干啥的?
https://ffmpeg.org/ffmpeg-all.html#Main-options
我們明白了,-re表示重新調整時間戳,這樣就能夠將各種文件、RTSP源、RTMP源的不均勻時間戳全部進行ffmpeg的重新調整,再進行rtmp推流,保證直播的平滑和hls切片的均勻。
另外,在拉取RTSP流時,盡量加上 -rtsp_transport tcp 的選項,保證數據源的穩定和不丟包!