【发布时间】:2019-09-27 11:38:46
【问题描述】:
我有一个使用 ExoPlayer 流式传输视频的 android 应用程序。我想为流添加语言支持。流将具有哪些语言,必须从流的元数据中获取。
在 ExoPlayer 库中,我找到了从流中获取曲目列表的方法:
player.getCurrentTrackGroups().get(i).getFormat(i) //player is SimpleExoPlayer class
但这给了我一些原始信息,这里是视频、音频和其他需要标记的轨道。打印格式如下所示:
格式(1/100, null, video/avc, -1, null, [1920, 1080, -1.0], [-1, -1])
格式(1/8292, null, application/cea-608, -1, null, [-1, -1, -1.0], [-1, -1])
格式(1/200, null, audio/mpeg-L2, -1, , [-1, -1, -1.0], [2, 48000])
格式(1/201, null, audio/mpeg-L2, -1, , [-1, -1, -1.0], [2, 48000])
我想知道是否有一种更简单的方法可以只获取音轨及其所需的信息,以便以后在它们之间切换。
我的下一个问题是我不知道如何在音轨之间切换。我搜索并接受了一个答案,这是通过以下代码完成的:
player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DEFAULT);
此代码取自this 答案。
问题是,我的 SimpleExoPlayer 类没有这个功能。我有 exoplayer 2.8.2 并且 SimpleExoPlayer 和 ExoPlayer 类都没有这个功能。所以我被困在那里。
另一个找到的答案来自具有以下面孔的 DefaultTrackSelector 类:
trackSelector.setParameters( trackSelector.getParameters().buildUpon().setPreferredAudioLanguage("eng"));
这看起来既简单又好方法,但并非所有流都这样标记。许多曲目没有语言名称的字符串。他们唯一不同的是ID字符串。并且传递 id 字符串不起作用。
【问题讨论】:
-
这个问题好运吗?你能解决吗?
-
@negrotico19 我发布了答案。看看它是否会有所帮助。我很快会做一些测试,我会更新答案。
标签: android exoplayer audiotrack