安卓視頻開發探索總結:輪子不給力,坑深....

安卓的視頻處理要求:html

1)視頻的錄製 (Android Native API: MediaRecorder, Camera)java

1)將兩個mp4合成爲一個mp4文件 (mp4parser)android

2)mp4的橫寬比例爲1:1  (?)git

3)將aac或者其餘格式的文件合併到mp4中,合併後的視頻既要有原來的聲音,又要有mp3的聲音github

  • 目前已經試過Android Native API:MediaMuxer, 將aac格式的audio與mp4合併,可是合併以後,只有aac原文件的聲音,mp4的原聲被覆蓋。
  • 抽取mp4文件中的audio,先與aac合併,再合併到mp4中

4)mp4加水印app

5) mp4最後一幀模糊化添加到最後。ide

5) mp4的大小控制在1M之內?以便上傳性能

6)在線播放,下載測試

7)考慮不一樣的安卓機型軟硬件差異可能形成的問題:ui

a.系統版本 Lollipop(5.0)及Marshmallow(6.0)採用了android.hardware.camera2, 5.0如下是android.hardware.camera(5.0及以上Deprecated)

b.硬件差異 (待考證)

目前試了幾個視頻APP, 測試機型Nexus5x, 有好幾個直接打開相機就crash了。或者出現錄製的時候界面卡住不動。多是與最新的6.0不兼容。一想到安卓的碎片化,醉了...

 

調研方法:Google, Baidu

 

分析:目前安卓的音視頻處理,流行的有兩個方案:

1.FFMEG,經過JNI接口調用C/C++方法

2.MP4Parse, 純Java。可是文檔不多,並且支持格式有限。

 

轉:http://www.zhihu.com/question/35676304/answer/71182428  (同時開發 Android 和 iOS apps 是一種什麼樣的體驗?

做者:Rinc
連接:http://www.zhihu.com/question/35676304/answer/71182428
來源:知乎
著做權歸做者全部,轉載請聯繫做者得到受權。

最近項目中涉及圖片/音視頻處理,深有體會:至少 在多媒體這塊,iOS 的輪子明顯更多、更好用。

圖像處理:
  • iOS 的 CoreImage 庫內置的 CIFilter 便可實現圖片濾鏡;
  • Android 這邊基本沒有原生支持,只能依賴 OpenCV 等開源項目在 native 層實現,並且可能某些濾鏡不支持 Alpha 通道,須要本身在 Java 層再次回爐處理恢復Alpha通道;
  • 另外 iOS 還有個強大的第三方庫 GPUImage,基於 GPU 加速,不只支持圖片濾鏡,還支持相機視頻實時濾鏡;Android 雖然也有人弄了個 android-gpuimage,但功能上與前者不可同日而語,實際項目中被運用的應該很少。

流媒體播放:
  • iOS 的 AVFoundation 庫內置的 AVQueuePlayer 自然支持播放隊列,實乃逆天神器啊;
  • Android 的 VideoView 和 GLSurfaceView 同樣繼承自 SurfaceView,只支持綁定單個數據源,多個流媒體連續播放不太好無縫銜接(網上有人說能夠經過 HttpProxy 實現預加載,這大概就是 @鍾穎Cyan 所說的「奇技淫巧」);

流媒體處理:
  • iOS 的 AVFoundation 庫內置的 AVMutableComposition / AVAssetExportSession / AVAssetReader / AVAssetWriter 等便可實現音視頻合成;
  • Android 這塊的原生支持 MediaCodec / MediaMuxer / MediaExtrator / MediaSync 等直到 4.1 / 4.3 / 6.0 才引入,並且文檔少;而 jcodec / mp4parser 等 Java 層開源項目也存在性能/格式支持等各類坑,最後只能老老實實滾回去研究 FFmpeg 這個巨無霸了。

最終結果: iOS 分分鐘就能擼出原型 demo,而 Android 還在苦逼地各類技術調研。 Android 輪子不給力,常常得自力更生。因此熟悉 C / C++、JNI / NDK 是必須的。
相關文章
相關標籤/搜索