天天看點

ffmpeg 推流rtsp流為h264/aac

最近有一個需求,擷取攝像頭的資料,寫mp4,視訊比較好處理(解碼->編碼->寫檔案)。

對于音頻,稍微有點麻煩。

攝像頭支援的音頻格式有多種,比如pcmu/pcma/aac.

對于aac格式,直接寫檔案。

對于pcma/pcmu,需要做一些處理。

我的想法是,pcma解碼後直接編碼成aac,保持和原始資料相同的采樣率通道數等,不重采樣。

用source Insight看了下ffmpeg的源碼,看是否有這樣的例子,還真讓我找到了,移植到代碼上,測試通過。

網上有很多例子,都是讀一個pcm檔案,解碼再編碼寫檔案。這個好處理,你讀檔案,你要多少你就可以讀多少,

而一些廠商攝像頭,讀出的資料長度是320位元組。

請檢視ffmpeg的transcoding.c的源碼吧。其實就是利用libavfilter。

檢視攝像頭的音頻配置,音頻格式是pcm,采樣率有8k,16k,32k,44.1k,48k等。在8k,16k,32k時,使用ffmpeg提供的例子測試正常。

當采樣率設定44.1k/48k,報了一些錯誤。

我的想法是,限制輸出采樣率為最大32k,這時libavfilter就有一個重采樣的過程,目前正在驗證。

推RTSP流:參考live555,都有現成的例子,抄抄就可以了。推流h264/aac沒啥問題,使用vlc播放視訊和音頻有點不同步,需要優化下。

繼續閱讀