2013-03-11 38 views
4

我有一個問題:從相機在我的Android應用程序中使用MediaRecorder的Moov原子記錄的數據

我記錄數據。我將它保存在套接字中,而不是文件中。這個數據的長度可能不同。在套接字連接的另一端,我將它保存在文件中。連接可能會在任何意外的時刻中斷。所以在Android套接字斷開後,我嘗試使用ffmpeg解碼接收到的數據。但據我瞭解,它不能找到這個文件中的moov原子。我讀過關於moov的一些信息,所以我認爲MediaRecorder會將moov原子放在文件末尾。但是如果記錄被中斷,寫moov原子被跳過。

我也讀過,對於長度未知的數據(漸進式加載,流式處理),可以在文件開頭寫入moov原子。

如何將我自己的moov數據寫入流?我可以使用MediaRecorder嗎?或者需要手動操作?如何生成有效的moov數據?如果有人已經解決了這個問題,請給我建議..

+0

流中的視頻是什麼? H264? – BlueVoodoo 2013-03-11 13:12:07

+0

我試過h264和mp4。這是一樣的 – mmmaaak 2013-03-11 14:14:52

+0

嗨@mmmaaak你得到的解決方案,請建議我。我也有同樣的問題 – Dilip 2013-10-11 13:48:40

回答

5

'moov'原子包含播放器解碼媒體所需的信息。對於很多格式,沒有moov原子的mp4或mov文件只是垃圾。

在大多數情況下,最後會附加moov。這是因爲moov原子的內容不能提前預測。如果它位於開始位置並且不斷更新,這也不例外。後者的好處是,如果數據流被中斷或停止,文件仍然可以播放。換句話說,簡單地把它放在首位不會對你有所幫助,因爲你仍然需要持續更新它。

不幸的是,Android在處理媒體方面遠不如iOS。如果您使用Android庫找到了解決此問題的方法,我會感到驚訝。我沒有特別的MediaRecorder經驗,但MediaCodec類沒有提供任何內容,在簡要介紹了MediaRecorder文檔之後,它看起來像這裏一樣。

現在... h264流可以在沒有mp4標題的情況下播放,因爲它包含它自己的一些元數據。這將允許套接字另一端的應用程序仍然使用數據。你可以使用ffmpeg來實現這個功能。只需將字節寫入擴展名爲.h264的文件,然後在傳輸完成後將其複用到mp4文件中。如果你有音頻,那也是一樣。

編輯:如果你不能發送原始h264數據,那麼你會發現它在mp4文件的'mdat'原子,但你需要單獨處理音頻,否則你將無法告訴音頻和視頻分開。

+0

謝謝你的完整答案。我會考慮你的想法 – mmmaaak 2013-03-11 15:22:09