ffmpeg一般問題解決


轉:https://blog.csdn.net/gzw19961018/article/details/103319112

使用ffmpeg推攝像頭視頻流中遇到的問題

問題一 推流不穩定,過10分鍾ffmpeg會自動停止

原因

推流語句不合適

解決方法—合適的推流語句

ffmpeg -i rtsp://admin_name:password@192.168.21.8:555/h264/ch1/main/av_stream -f flv -an rtmp://192.168.1.1:1900/live/test98

問題二 推流時不時報錯且拉下來的高清視頻流花屏,低分辨率情況稍好

階段性報錯 error while decoding MB xx xx
在這里插入圖片描述

原因與解決方法

問題應該在於ffmpeg源文件udp.c中 ,UDP_MAX_PKT_SIZE值設置過小,將其增大2的整數倍。
修改后重新編譯FFmpeg

如何重新編譯
修改完成后保存,終端切換到ffmpeg文件夾下
sudo make
sudo make install

問題三 ffmpeg拉流轉發頻繁丟包警告max delay reached. need to consume packet

在這里插入圖片描述

原因

rtsp協議默認使用udp導致的問題,讓rtsp強制使用tcp方式可以一定程度避免丟包。

解決方法

在指令中添加-rtsp_transport tcp
ffmpeg -rtsp_transport tcp -i
rtsp://admin_name:password@192.168.21.8:555/h264/ch1/main/av_stream -f flv -an rtmp://192.168.1.1:1900/live/test98

 

 

轉:https://zhuanlan.zhihu.com/p/73984438

ffmpeg cmd的參數實在太多,因此這里只介紹基礎的、以及筆者了解的跟讀者們做一個分享。

首先,來看一個將本地視頻文件推流到服務器的最基礎的命令:

ffmpeg -i ${input_video} -f flv rtmp://${server}/live/${streamName}
  • -i:表示輸入視頻文件,后跟視頻文件路徑/URL。
  • -f:強制ffmpeg采用某種格式,后跟對應的格式。

上文有提到,RTMP一般用flv流數據,因此多設置-f flv

接着,另一個基本需求,就是在推流的時候希望不要加上音頻,這個也好實現:

ffmpeg -i ${input_video} -vcodec copy -an -f flv rtmp://${server}/live/${streamName}
  • -vcodec:指定視頻解碼器,v是視頻videocodec就是解碼器,后跟解碼器名稱,copy表示不作解碼;
  • -acodec:指定音頻解碼器,同理,aaudio,后跟解碼器名稱。an代表acodec none就是去掉音頻的意思。

關於a/v的寫法很多,除了上面介紹的,還有-c:v copy -c:a copy

筆者遇到過2個推流失敗的case:

  1. 推一個RTSP攝像頭的流數據時,一旦打開該攝像頭的音頻軌道就會在av_interleaved_write_frame()函數處出錯。(返回碼不記得了)
  2. 使用英飛拓某幾款攝像頭推流時,總是失敗,返回碼顯示-33。

以上2個問題都成功定位問題所在:

  1. 操作人員在打開音頻軌道時總是同時打開2個音頻軌道,只要選擇關閉其中1個音頻,馬上就可以推流了;
  2. 這幾款攝像頭同時包括多個視頻碼流,似乎他們會通過RTSP同時把多個碼流同時傳過來;最后在代碼中強行過濾視音頻碼流,只保留一路視頻+一路音頻就可以了。

原因歸結為一個:flv格式至多只能包括一個視頻流和一個音頻流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM