2013-02-14 71 views
1

我使用基於Live555/openRTSP的代碼將H.264視頻源流式傳輸到mp4文件,並且想要同時讀取文件的早期部分(來自不同的應用程序)。更改fopenfid = _fsopen(fileName, "wb", _SH_DENYWR)(從OutputFile.cpp)顯然是不夠的,因爲它沒有什麼區別和媒體播放器還是不會打開它(是,對於MP4輸出的寫行?)我可以在流式傳輸/寫入mp4文件的同時讀取mp4文件的早期部分?

在一個相關的說明,如果我模擬軟件的不乾淨關閉(例如電源故障),未完成的文件不能被任何媒體播放器讀取。我認爲在file-close上寫入文件的內容是媒體播放器可以理解文件的內容。如果可能的話,這也是我想要編碼的一種情況,並且很可能與上面的問題非常相似?

任何指針/答案/想法大受接待:-)

回答

0

如果有人曾經需要同樣的,這是我做到了,而且比我想象的更容易:

  • 變化fopen在OutputFile.cpp到文件共享通話_fsopen (份額讀訪問)
  • QuickTimeFileSink::continuePlaying()函數中的每10秒我呼叫completeOutputFile(),從而保持標頭最新(視頻長度等)。

Windows媒體播放器不喜歡它(可能試圖獲得獨佔文件訪問),但VLC還是挺樂意閱讀文件,而我還在流進去。

0

你通常不會從MP4讀取(同樣適用於許多其他格式)使用fopen式的API文件,並使用庫來代替。反過來,這期望一個完整的文件,並且不會嘗試恢復損壞的文件,或者讀取仍在寫入的文件。

因此,儘管在技術上可以在正在編寫時進行閱讀,但您不可能在普通的圖書館,應用程序和播放器中取得成功。您需要先完成寫入才能使文件有效,可讀和可播放 - 因爲完成步驟會寫入播放所需的索引。