Android音视频入门及架构介绍

一、多媒体基础

音视频格式

一个视频文件的格式由封装格式+音频码流格式+视频码流格式+字幕流组成。

如下为一个视频文件的信息,是asf封装的wmav2音频+mpeg4视频。

常用的视频格式

  • MPEG系列,由ISO开发,有MPEG-1,MPEG-2,MPEG-4, 有视频也有音频。
  • H26x系列, 由ITU开发,侧重网络传输只有视频编码,H265(资源消耗是H264的1/2)需要license
  • rmvb/rm ,由RealNetwork开发,需要license
  • WMV系列,由微软开发,有WMV7/8/9,需要license

常见的音频格式

  • MP3,MPEG Audio Layer 3, 有损压缩,压缩高频部分,压缩率约为90%
  • AAC,杜比,索尼等共同开发,基于MPEG技术,有损压缩,比MP3音质好, 多声道支持。比较常用,例如苹果设备,sony蓝牙耳机采用该格式。
  • AC3,杜比环绕音格式,支持5.1通道,信息损失很少,全频段的细节丰富
  • WMA,Windows Media Audio,微软公司推出的与MP3格式齐名的一种新的音频格式。
  • APE,开源的无损音频格式,压缩率约为55%,比FLAC高。
  • FLAC,免费的无损音频格式,比较常用。https://github.com/mewkiz/flac

软/硬编解码

软编解码,又称软件解码,由CPU实现编解码运算。

硬编解码,由专门的硬件实现编解码运算,例如高通平台的aDSP,VPU。

码率(bps)

不进行编码压缩的原始视频,播放时每秒需要的bit数。

例如一个视频:1280 width * 720 high,YUV 420(每个像素平均 12bit),帧率25fps

其每秒原始的数据量为:1280 x 720 (总像素) x 12bit(每个像素占用) x 25(fps) = 331776000 bits(约40M)

一般也会用bps能力来衡量系统的编解码性能。

二、Android音视频架构

Android 10之后引入专用的C2架构(用来代理OMX IL架构),C2相比OMX更加灵活,支持更多功能。

整体架构由3大部分组成,NuPlayer播放器,MediaExtractor媒体解析器,MediaCodec编解码器。

采用该架构很方便基于C2 API(或OMX API)进行编解码库的开发与集成。

 

三、解码数据流向

音频解码数据流向

  1. 音乐APP调用MediaPlayer接口播放音乐,并将原始音乐文件的fd传给MediaPlayService
  2. MediaPlayService调用NuPlayer,NuPlayer使用MediaExtractor对该文件进行解析,识别音轨,歌曲信息,播放时长等。
  3. NuPlayer使用MediaExtractor提取数据,将数据送给MediaCodec的Input Buffer。
  4. MediaCodec使用软解码SW decoder,最终解码后是PCM数据,放到Output Buffer。
  5. NuPlayer从Output Buffer取数据,再通过AudioTrack将音频数据送给AudioFlinger。
  6. AudioFlinger再通过ALSA驱动写到DSP,DSP处理后转成模拟信号播放出来。

 

 

视频解码流向

  1. 视频APP调用MediaPlayer接口播放视频,并将原始视频文件的fd传给MediaPlayService。
  2. MediaPlayService调用NuPlayer,NuPlayer使用MediaExtractor对该文件进行解析,识别音轨,歌曲信息,播放时长等。
  3. NuPlayer使用MediaExtractor提取数据,将数据送给MediaCodec的Input Buffer。
  4. MediaCodec使用软解码SW decoder或硬解码VPU解码,最终解码后是YUV数据,放到Output Buffer。
  5. NuPlayer从Output Buffer取数据,再通过Surface将音频数据送给SurfaceFlinger。
  6. SurfaceFlinger再通过HW Composer将数据推送到DPU进行渲染,之后再推到屏幕显示。

 

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Android开发从入门到精通》是一本由扶松柏编著的图书,旨在帮助读者全面了解和掌握Android开发的基础知识和高级技术。本书内容分为入门篇和精通篇两部分。 入门篇首先介绍Android开发环境的搭建和基本的开发工具的使用,包括Android Studio的安装和配置、开发环境的准备、设备和模拟器的使用等。接着,通过一个简单的Hello World应用程序的创建和运行,读者可以了解Android应用的基本结构和运行原理。 随后,入门篇详细介绍Android开发中的核心概念和基础知识,如活动、布局、视图、资源管理、界面事件处理等。通过实践项目,读者可以学习到如何创建多个活动之间的界面切换、如何使用布局文件来设计应用的界面、如何处理用户的输入与交互等。 精通篇则深入探讨了Android开发中的高级技术和开发方法,包括网络通信、数据存储、多媒体处理、碎片、自定义视图等。通过实际案例的讲解和演示,读者可以学习到如何利用网络通信库进行网络请求,如何使用SQLite数据库进行数据持久化,如何实现音频和视频的播放,如何设计和实现复杂的界面布局等。 此外,本书还涵盖了一些Android开发中的最佳实践和常见问题的解决方法,帮助读者提高开发效率和应用性能。通过学习本书,读者可以逐步掌握Android开发的基本技能,并能够独立完成Android应用的设计和开发工作。 总之,《Android开发从入门到精通》是一本循序渐进、通俗易懂的Android开发指南,适合初学者和有一定基础的开发者阅读和学习。无论是对于个人学习还是职业发展,本书都是一本值得推荐的Android开发入门书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mongo-Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值