安卓手机APP开发__媒体开发部分__音轨的选择
目录
概述
查询可用的音轨
修改轨道选择参数
基于约束的轨道选择
选择特定的轨道
禁用轨道的类型和组
定制化轨道选择器
隧道化
音频静默
概述
当一个媒体项包括了多个音轨时,音轨的选择就是一个确定由哪一个音轨进行播放的过程. 音轨的选择过程由TrackSelectionParameters进行配置,它允许有多个不同的约束和覆盖 被指定的受影响的音轨.
查询可用的音轨
你能监听被通知的Player.Listener.onTracksChanged,得到音轨改变的信息,包括:
当媒体项的准备工作完成时,可用的音轨被确定和知道了.注意的是播放器需要准备一个媒体 项,来知道它包含了什么音轨.
归因于从一个媒体项到另一个媒体项的播放切换,可用的音轨发生了改变.
被选择的音轨改变了. 代码如下:
Kotlin
player.addListener(
object : Player.Listener {
override fun onTracksChanged(tracks: Tracks) {
// Update UI using current tracks.
}
}
)
你也能调用方法player.getCurrentTracks()来查询当前的音轨.返回的音轨包括了 音轨的群体的对象的列表,音轨在一个单独的群中,表示了相同的内容但是格式是不同的.
作为一个如何把音轨放在一个群体中的例子,考虑一个可适配的播放,它的主视频的生成被提供了 五个不同的比特率,一个备用的视频的生成被提供了两个不同的比特率。备用的视频例如在一个体育 比赛中的不同的摄像机的角度的视频。在这个例子中,有两个视频轨道组,一个对应着主视频 包括了五个轨道,第二个视频轨道组对应着备用视频,它包括了两个轨道。
音频轨道的语言不同,则不能放在一个组里,因为不同的语言的内容被认为是不同的. 因此,同一种语言的音频轨道仅有比特率,采样率,频道数等不同,这是可以放在一组里的. 这个原则也能应用于文本轨道.
能查询每一组来确定播放支持哪一个轨道,哪一个是当前被选择的,以及每一个轨道使用什么格式:
Kotlin
for (trackGroup in tracks.groups) {
// Group level information.
val trackType = trackGroup.type
val trackInGroupIsSelected = trackGroup.isSelected
val trackInGroupIsSupported = trackGroup.isSupported
for (i in 0 until trackGroup.length) {
// Individual track i