2009-09-01 80 views
4

我有一臺索尼網絡攝像機(SNC-RZ25N),我試圖拼命地從一些有意義的格式獲取數據。該文件說它發送MPEG-4原始數據,但不是比具體更具體。我可以使用curl捕獲一部分流(http://techhead.biz/media/tsv.m4v),它將使用VLC和ffplay播放(雖然它在ffplay中播放速度太快)。轉換流MPEG-4原始數據爲H.264

經過一天半的修補,我發現我不能使用ffmpeg直接轉換這個流。一方面,ffmpeg接受管道數據作爲輸入(我知道)的唯一方式是'yuv4mpegpipe'格式。

我試圖用'm4v'作爲指定格式管道到ffmpeg,但似乎想在開始處理之前讀取整個流。

任何人都知道我該怎麼做?使用命令行工具?使用任何編程語言開源代碼庫?更簡單的解決方案是首選,但任何工作解決方案都會很好。

+0

請注意,文檔還說,相機通過'/ jpeg' HTTP請求提供快照JPEG,通過'/ mjpeg'提供M-JPEG流。這些將會更容易與各種軟件和框架相結合,而不僅僅是一種自定義的MPEG-4格式。 – 2012-08-16 08:27:15

回答

1

看來MPlayer能播放M4V文件通過HTTP,並且至少與你的示例文件這個工程:

mkfifo /tmp/fifo 
mplayer -benchmark -vo yuv4mpeg:file=/tmp/fifo http://techhead.biz/media/tsv.m4v 
ffmpeg -f yuv4mpegpipe -i /tmp/fifo -vcodec libx264 -vpre libx264-hq /tmp/foo.mp4 

(-benchmark告訴MPlayer忽略幀持續時間,可能會或可能不會需要)

或者,只是mencoder的:

mencoder -o /tmp/foo.avi -of avi -ovc x264 -x264encopts bitrate=250 http://techhead.biz/media/tsv.m4v 

最後,如果你實際上並不需要H.264,你可以只是把現有的MPEG-ES的數據在任何容器你需要的墊子; MP4Box可能可以做到這一點,而ffmpeg和mencoder可以支持輸出格式。

+0

謝謝。我一直在嘗試與VLC類似的東西。它會播放一段時間然後掛起。我不知道它是VLC還是ffmpeg。看起來,包括VLC和mplayer在內的所有內容都使用ffmpeg(或至少libavcodec)來解碼MPEG-4。當然,我最終想要的是將這些內容重新分配給用戶的方式。我們已經安裝了Flash Media Server,但是我一直難以縮小差距,並對其他解決方案開放。 – 2009-09-03 06:20:32

+0

vlc和mplayer絕對使用不同的代碼來獲取視頻,所以mplayer可能在vlc沒有的地方工作。另外,你也許可以使用mencoder並跳過所有的ffmpeg調用,給你第三種方法來嘗試。我會用這個更新答案。 – derobert 2009-09-03 17:51:40