一、前言
用ffmpeg做音視頻保存到mp4文件,都會(huì)遇到一個(gè)問題,尤其是在視頻監(jiān)控行業(yè),就是監(jiān)控?cái)z像頭設(shè)置的音頻是PCM/G711A/G711U,解碼后對(duì)應(yīng)的格式是pcm_s16be/pcm_alaw/pcm_mulaw,將這個(gè)原始的音頻流保存到mp4文件是會(huì)報(bào)錯(cuò)的,在調(diào)用avformat_write_header寫文件頭的時(shí)候提示(-22) Invalid argument,非法的參數(shù),翻閱源碼得知,ffmpeg中的mp4封裝并不支持pcma和pcmu,除非手動(dòng)更改源碼加入。mp4封裝格式默認(rèn)支持的音頻格式是aac和mp3,其實(shí)mp4文件本身是可以支持pcm音頻數(shù)據(jù)的,不知道為何ffmpeg中不加入。通過個(gè)更改源碼的形式盡管可以支持,個(gè)人還是推薦用另外一種方法,那就是在調(diào)用avformat_alloc_output_context2的時(shí)候傳入format的時(shí)候填mov,而不是填mp4,mov的格式兼容性更強(qiáng),文件拓展名依然是mp4一點(diǎn)問題沒有。對(duì)應(yīng)avformat_alloc_output_context2函數(shù)的說明,format格式參數(shù)可以為空,為空的話默認(rèn)從保存的文件名拓展名取,而如果指定了則以指定的為準(zhǔn)。
既然以mov格式存儲(chǔ)到mp4文件,那么問題來了,會(huì)不會(huì)導(dǎo)致文件體積或者格式不兼容呢?一開始我也是有這個(gè)擔(dān)心的,特意找了多個(gè)廠家的攝像頭專門測(cè)試,發(fā)現(xiàn)根本沒有體積變化,所以個(gè)人猜測(cè),填mov只是為了方便跳過檢測(cè),MOV文件可以使用多種編碼格式,包括MPEG-4、H.264、MJPEG等;而MP4文件主要使用H.264編碼。文章來源:http://www.zghlxwxcb.cn/news/detail-847676.html
上面的不僅支持264,同時(shí)也支持265,也就是mov格式同時(shí)支持264+aac/264+mp文章來源地址http://www.zghlxwxcb.cn/news/detail-847676.html
到了這里,關(guān)于Qt/C++音視頻開發(fā)69-保存監(jiān)控pcm音頻數(shù)據(jù)到mp4文件/監(jiān)控錄像/錄像存儲(chǔ)和回放/264/265/aac/pcm等的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!