Android中使用MediaMuxer錄製MP4不能播放的問題總結

1. MediaMuxer.release()函數必須執行完畢

否則MP4文件缺少moov_box,造成mp4無法播放。

2. App被kill,關機,release()函數無法執行完畢

被這個問題困擾了月許,期間嘗試過:

  • 分析release()函數底層C/C++源碼
  • 分析MP4文件,試圖自行實現封裝器;
  • 攔截ActivityThread裏面的接受Activity生命週期的mHandler,提前得知Activity的onDestroy消息,先一步執行release();
  • 在github查找開源的庫,例如mp4parser
  • 保存h264和aac,下次打開app,重新封裝爲mp4。

結果差強人意,最後在朋友的點播下,得知將release()的相關代碼放在Service的onTaskRemove()函數中執行即可。onTaskRemove不一定每次執行,在Service註冊標籤中添加android:stopWithTask="false"即可。onTaskRemove不能每次執行的問題,不同的設備處理方式和效果可能不一樣,大家需要根據自己的機型,自行解決。

關機保存問題,只需實現廣播監聽系統關機,再執行相關的release代碼即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章