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代碼即可。