zoukankan      html  css  js  c++  java
  • 安卓视频开发探索总结:轮子不给力,坑深....

    安卓的视频处理要求:

    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 是必须的。
     
     
  • 相关阅读:
    对线程的理解
    C#-设计模式-策略模式
    C#-设计模式-观察者模式
    C#-设计模式-模板方法
    C#-设计模式-适配器模式
    C#-设计模式-代理模式
    C#-设计模式-装饰模式
    C#-设计模式-简单工厂
    C#-设计模式-单例模式
    DotNet Core2.1 编写自己的中间件和后台服务
  • 原文地址:https://www.cnblogs.com/rockylearnstodevelop/p/5353769.html
Copyright © 2011-2022 走看看