2017-04-05 147 views
1

我正在iOS應用程序中使用libffmpeg。我的目標是連接到RTSP源並將媒體寫入一個文件,以便以後可以與iOS媒體播放器一起使用。理想情況下,我想在不對輸入數據進行轉碼的情況下執行此操作。如果用戶選擇這樣做,我也希望能夠稍後使用AVAssetExportSession對媒體進行重新編碼。libffmpeg:將RTSP流寫入輸出文件

因爲我想創建一個與iOS兼容的文件,所以我對mpeg,mp4或quicktime(mov)格式的限制(我相信)。

每當我嘗試使用這些格式之一,我看到下面的警告我在通話過程中avformat_write_header:

[MOV @ 0x16401c00]編解碼器,流0不使用全局頭部,但容器格式需要全球性的標題 [mov @ 0x16401c00]流1的編解碼器不使用全局標題,但容器格式需要全局標題

我的理解是,標題想知道最終文件大小,我不知道(RTSP服務器是直播流一個攝像頭,並且用戶只要他們想要就停止錄製)。我想這是有道理的,但我知道其他人已經使用ffmpeg命令行成功完成了這個任務,所以我很困惑我還需要在這裏做什麼。

如果我忽略警告,我仍然可以繼續寫入文件。如果我選擇mpeg或mp4格式,當我調用av_write_trailer時,我的應用程序崩潰。如果我使用mov,我可以成功關閉該文件,並且該文件可以播放,但是當我嘗試將其交給AVAssetExportSession時通常會失敗。

我希望對此有所瞭解。謝謝。

弗蘭克

回答

0

我發現這似乎是一個解決方案 - 至少,它消除了警告。在調用avcodec_open2之前,我必須在音頻和視頻編解碼器上設置CODEC_FLAG_GLOBAL_HEADER。