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

安卓的视频处理要求: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 是必须的。
相关文章
相关标签/搜索