1.audio_video

本文详细介绍了Android平台上媒体播放的相关技术,包括支持的媒体格式、视频解码推荐、视频流需求及网络协议等内容。同时,文章还讲解了媒体播放器的架构设计,包括Player和UI的分离、Mediasession和Mediacontroller的使用,以及不同类型的媒体应用的设计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.支持的媒体格式

将会描述Android平台支持的媒体编解码, 视频容器网络协议

1.1视频解码推荐

设备的实现必须支持动态的视频分辨率和帧率切换,在同一流中通过标准的APIsVP8,VP9,H.264,H.265实时解码达到解码设备最佳分辨率。

对支持Dolby版本的编码实现遵循下面准则:

  • 提供Dolby版本能力抓取器
  • 在屏幕合适的位置显示Dolby的内容
  • 设置向后兼容的基于层音轨索引和组合Dolby版本层音轨相同。

1.2视频流需求

通过HTTP或者RTSP的视频流,额外要求:

  • 对3GPP和MPEG-4容器,·moov·原子必须在任何mdat之前,但是ftyp原子必需成功。
  • 3GPP,MPEG-4,WebM格式,视频和音频采样实时的偏移不能大于500KB。为了最小的audio/video偏移,考虑以较小块大小交错的音频和视频。

1.3网络协议

下面是音频和视频支持的网络协议:

  • RTSP(RTP,SDP)
  • HTTP/HTTPS渐进式流
  • HTTP/HTTP直播流
    • MPEG-2 只对TS媒体文件。
    • 协议版本3(Android 4.0及以上)
    • 协议版本2(Android 3.x)
    • 3.0之前不支持。

2.媒体应用的架构

这部分讲解如何将媒体播放器分开成一个media control(UI)和一个media session(正真播放器)。将会描述两个媒体应用架构:C/S设计,对大多数音乐播放器和只有一个单独Activity的视频播放器。
还展现如何对硬件控制的响应和其他使用输出流的播放器之间的协作。

2.1 Player 和 UI

一个多媒体应用播放音频或视频通常有两部分:

  • 一个播放器获取数字媒体并且将它渲染成音频或视频
  • 一个带有转换的UI去控制运行播放器并且选择的显示播放器的状态

在Android中你能够从头开始建立自己播放器。下面选择:

  • MediaPlayer提供基础功能对一个露骨的播放器支持大部分的audio/video格式和数据源。
  • ExoPlayer是一个开源库Android音频提供低级接口。ExoPlayer支持高性能特征如DASH和HLS流,这是MediaPlayer不支持的。可以定制ExoPlayer代码,让加组件变得简单。4.1版本及以上支持。

2.2Media session和 media controller

虽然UI和Player的接口可以很多,但是两个之间联系对所有播放应用通常是一样的。Android定义两个类meida sessionmedia controller,为定义播放器提供一个很好的架构。

media sessionmedia controller通过预定义好的回调来通讯,这回调和标准播放器的动作(播放,暂停,停止等)相对应。当然可以定制你自己独一无二的动作。
这里写图片描述

2.2.1 Media session

media session负责和播放器所有的交互。这样隐藏播放器的APIs。播放器只被控制它的media session调用.

session位置播放器呈现的状态(playing/paused)并且播放的信息。一个session可以接受一个或多个media controllers回调。这使你的播放器能够被你的appUI或者穿戴或驾车的伴随设备控制成为可能。(可多可关联设备控制一个UI)。

2.2.2 Media controller

Meida controller独立于UI。UI代码只是和media controller通讯,并不是播放器本身。media controller将控制动作回调給media session.当然也会收到media session的状态(播放器状态改变时)。meida controller只能同时和一个media session 通讯

3.video应用和audio应用

不同的设计方式。

3.1 视频应用

一个视频应用需要窗口来显示内容。这个原因,一个视频播放器通常被用作一个单独的Activity。

3.2音频应用

音频应用播放不是一直需要UI可见,可以作为一个后台任务来运行。这里写图片描述

support库提供两个类来实现c/s:MeidaBrowserServiceMediaBrowser

  • MediaBrowserMediaBrowserService一个子类,包含media session和播放器。
  • MeidaBrowserService来简化完成。

4.媒体播放器和audio基础结构

一个很好的媒体播放器应该和其他也播放音频的应用一起工作。应该大家来共享手机,和手机中其他app共同合作。同样应该会硬件控制做回应。

这里写图片描述

5.媒体兼容库

推荐使用兼容库是MediaSeesionCompatMediaControllerCompatmeida-compat support libaray中定义。替换早期的版本MediaSessionMediaController被5.0引入的。简化开发,因为只需要一套api。

6.检测性能

8.0以后提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值