2013-05-13 369 views
0

我正在處理一個視頻文件。 我使用ffmpeg來讀取每個數據包。爲什麼av_write_trailer失敗?

如果是音頻數據包,我使用av_interleaved_write_frame將數據包寫入輸出視頻文件。

如果是視頻數據包,我解碼數據包,獲取視頻幀的數據,處理圖像並壓縮回數據包。然後,我使用av_interleaved_write_frame將處理後的視頻幀數據包寫入輸出視頻文件。

通過調試,它可以正確讀取音頻數據包和視頻數據包。 但是,當它轉到「av_write_trailer」時,它將退出。但輸出視頻文件存在。

的錯誤信息是:

*** glibc detected *** /OpenCV_videoFlatten_20130507/Debug/OpenCV_videoFlatten_20130507: corrupted double-linked list: 0x000000000348dfa0 *** 

使用電影播放器​​(在Ubuntu),輸出的視頻文件能夠正確播放音頻,但沒有視頻信號。 使用VLC播放器,它可以顯示第一個視頻幀(保持相同的視頻圖片),並正確播放音頻。

我試圖調試到「av_write_trailer」,但因爲它在ffmpeg庫中,所以我無法獲得詳細的信息。

另一條信息:該項目的前一個版本只處理視頻幀,不添加音頻流;它運作良好。

任何提示或線索?

+0

你好,你可以在調試模式下編譯FFMPEG嗎?這樣,使用調試器,您將能夠進入av_write_trailer()。我也有使用此方法的分段錯誤,它似乎是由ffmpeg試圖訪問AVFormatContext的屬性priv_data導致的,在我的程序 – 2013-05-31 08:54:17

+0

上爲NULL。謝謝。是的,我這樣做,並發現錯誤是由於不正確的設置。 – user1914692 2013-05-31 19:13:03

回答

0

我找到了解決方案。我沒有使用rescale基於流的time_base設置pts。實際上相關的代碼在示例muxing.c中。