安卓视频开发探索总结:轮子不给力,坑深....

安卓的视频处理要求:

1)视频的录制 (Android Native API: MediaRecorder, Camera)

1)将两个mp4合成为一个mp4文件 (mp4parser)

2)mp4的横宽比例为1:1  (?)

3)将aac或者其他格式的文件合并到mp4中,合并后的视频既要有原来的声音,又要有mp3的声音

  • 目前已经试过Android Native API:MediaMuxer, 将aac格式的audio与mp4合并,但是合并之后,只有aac原文件的声音,mp4的原声被覆盖。
  • 抽取mp4文件中的audio,先与aac合并,再合并到mp4中

4)mp4加水印

5) mp4最后一帧模糊化添加到最后。

5) mp4的大小控制在1M以内?以便上传

6)在线播放,下载

7)考虑不同的安卓机型软硬件差别可能造成的问题:

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 是必须的。
 
 

 

posted on 2016-04-05 09:05  Rocky_Lin  阅读(1013)  评论(0编辑  收藏  举报