ffmpeg學習筆記1----->udp流多路節目實現分離
環境:centos/ubuntu 安裝好ffmpeg即可
安裝教程:https://trac.ffmpeg.org/wiki/CompilationGuide
準備需要一個udp組播流(含有多路節目那種)
可以用下面的命令檢視流的資訊:
ffprobe -i udp://224.2.2.21:10001 //-i 後接的是你的流地址
ok看到目標,我們可以進行普通操作
ffmpeg -re -i udp://224.2.2.21:10001 -s 1280*720 -vcodec h264 -acodec copy -crf 30 -f mpegts udp://239.0.0.1:8001 執行完,發現報快取溢位的錯誤。他叫我們加fifo_size 引數。好吧那我們就加上
ffmpeg -re -i udp://224.2.2.21:10001?fifo_size=409600 -s 1280*720 -vcodec h264 -acodec copy -crf 30 -f mpegts udp://239.0.0.1:8001
再次執行,走你~
這次就正確了,沒有異常退出。那麼問題來了,現在的這個流是那一路節目視訊音訊又是否同步?
ok我們在看一下輸出表
這是第一個節目到第四個節目。由於字元編碼問題,節目名稱為亂碼。那麼看看我們剛才執行的命令視訊和音訊是如何轉的
這裡我們看到了貌似好像沒有什麼規律。所有我肯定的話,這個流拉出來的節目他肯定是視訊和音訊不同步(這裡的不同步是指B節目的音訊+A節目的視訊組成了我們現在的流,這樣肯定是不行的),我們需要怎麼做。這裡加一個-map引數指定一下,對引數不是很瞭解,連結在此:http://blog.csdn.net/xuheazx/article/details/51969535
於是我們的命令變成了這樣:
ffmpeg -re -i udp://224.2.2.21:10001?fifo_size=409600 -s 1280*720 -map \#0x3e9 -vcodec h264 -map \#0x3ea -acodec copy -crf 30 -f mpegts udp://229.0.0.1:8001
map後的引數對應標籤後的引數。
這樣就ok了,嘗試執行一下~
大功告成!
ps (#0:x) 這個東西會變得不是唯一標識,唯一的是([0x407])。然後開啟VLC測試。我太懶就不做了。
88~