要解决Android Exoplayer在渐进式直播流媒体中Mpeg2音频问题,可以按照以下步骤进行:
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
请将2.X.X替换为最新的Exoplayer版本号。
DefaultRenderersFactory对象,并设置extensionRendererMode为DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER。这将启用Exoplayer的扩展渲染器模式,以确保可以处理Mpeg2音频。DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context);
renderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER);
DefaultTrackSelector对象,并将其传递给SimpleExoPlayer.Builder的setTrackSelector方法。DefaultTrackSelector trackSelector = new DefaultTrackSelector();
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context, renderersFactory)
.setTrackSelector(trackSelector)
.build();
DefaultTrackSelector.ParametersBuilder的setPreferredAudioMimeTypes方法,将Mpeg2音频类型添加到首选音频类型列表中。DefaultTrackSelector.ParametersBuilder parametersBuilder = trackSelector.buildUponParameters();
parametersBuilder.setPreferredAudioMimeTypes(Collections.singletonList(MimeTypes.AUDIO_MPEG));
trackSelector.setParameters(parametersBuilder.build());
MediaItem mediaItem = MediaItem.fromUri(mediaUri);
player.setMediaItem(mediaItem);
player.prepare();
player.play();
这样,你的Exoplayer就可以处理Mpeg2音频了。
完整的示例代码如下所示:
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context);
renderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER);
DefaultTrackSelector trackSelector = new DefaultTrackSelector();
DefaultTrackSelector.ParametersBuilder parametersBuilder = trackSelector.buildUponParameters();
parametersBuilder.setPreferredAudioMimeTypes(Collections.singletonList(MimeTypes.AUDIO_MPEG));
trackSelector.setParameters(parametersBuilder.build());
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context, renderersFactory)
.setTrackSelector(trackSelector)
.build();
MediaItem mediaItem = MediaItem.fromUri(mediaUri);
player.setMediaItem(mediaItem);
player.prepare();
player.play();
请确保将context替换为你的上下文对象,mediaUri替换为你的音频流媒体链接。