zoukankan      html  css  js  c++  java
  • 安卓Media相关类测试demo

      最近在研究安卓系统给app开发者提供的标准Media相关的工具类,本人做了一些demo来测试这些工具的使用方法。

    本demo包含若干apk源码,需要说明以下几点:

    1. 构建方式

      Makefile使用Android.mk,在安卓编译服务器下编译生成APK,未使用AndroidStudio下的graddle方式,有需要的自行转换。

    2. 模块测试方式

    2.1. 单模块测试

      专注于某个模块的学习,尽可能排除其它工具类的干扰,如果太多模块融合在一起,耦合下不便于对问题的定位。

      例如,测试视频编码(MediaCodec模块),指定了读本地yuv文件,输出裸码流方式到本地文件。

         测试视频文件解析(MediaExtractor模块),指定了本地视频文件,输出为裸码流到本地文件。

    2.2. 多模块协同测试

      在了解了单个模块使用方法的基础上,将各个模块串联起来使用,即pipeline方式串联各模块。

      例如,MediaCodec(encoder) -> MediaMuxer

        MediaExtractor -> MediaCodec(decoder) -> local_file

        MediaExtractor -> MediaCodec(decoder) -> Render(audio/video)

        MediaExtractor -> MediaMuxer

        Camera -> MediaCodec -> MediaMuxer

        local_file -> MediaCodec -> MediaMuxer

    2.3. 如上测试方式说明

      秉承由简单到复杂、由点到面、循序渐进的原则,按上面的方式展开开发测试。

      github仓库的demo,有些是Media工具类相关的,有些是Android基础工具相关的。Media相关的demo还在陆续开发验证中。

      另外,本人不想将程序写的太长(容错性做的不够,可能出现crash),基本上就一个java文件几百行代码搞定,恐担心给人造成阅读时的心理压力。

    3. 标准的重要性

      对于APK开发者来说,熟悉Android系统提供的标准API是如此的重要。对于做多媒体应用开发,熟悉frameworks/base/media/java/android/media/目录下的工具类,

    可以非常方便、快速地进行应用程序开发,这正如在native层开发一些中间件系统,必须依赖bionic的标准库实现。

      如果不借助于这些工具,你去重新造轮子,那么你的应用程序开发周期会非常之长。

      例如,你的目标是做个播放器,如果借助MediaPlayer这个类,几十行代码就可以迅速搞定。

      Android系统的一个很大特点是简单易用,把具体实现隐藏起来,抽象出几个接口给上层开发人员使用,会让你产生“开发个播放器这么容易啊!”的错觉!

    其实,如果你去研究native层是如何实现视频播放,你会看到其实现是非常的冗长、繁琐、复杂,代码量遮天蔽日,理清各模块关系和层次性,需要花费大量时间。

  • 相关阅读:
    P2949 [USACO09OPEN]工作调度Work Scheduling
    P1279 字串距离 (动态规划)
    P2634 [国家集训队]聪聪可可
    点分治模板
    网站收集
    P1131 [ZJOI2007]时态同步
    P1446 [HNOI2008]Cards
    P1437 [HNOI2004]敲砖块
    蓝桥杯-k倍区间
    atom / vscode (配置c++环境流程)
  • 原文地址:https://www.cnblogs.com/Dreaming-in-Gottingen/p/14531232.html
Copyright © 2011-2022 走看看