如何将非简单的 Exoplayer (2.x) 传递给 SurfaceView?

How to pass non-simple Exoplayer (2.x) a SurfaceView?

我不能使用 SimpleExoPlayer,因为我需要一个带有特定参数的视频渲染器。我发现我可以将视频和音频渲染器传递给 ExoPlayer:

的实例
final ExoPlayer player = ExoPlayerFactory.newInstance( new Renderer[]{videoRenderer, audioRenderer}, trackSelector, loadControl);

但是 ExoPlayer 没有方法 setVideoSurfaceView()

如何将 SurfaceView 传递给非简单的 ExoPlayer?

您可以通过 ExoPlayer 实例传递消息来更改各种 ExoPlayer 组件的配置。您可以使用 sendMessagesblockingSendMessages 方法向组件发送消息。在您的情况下,您可以使用 SurfaceView 实例设置 videoRendererSurface。例如:

player.sendMessage(videoRenderer,
                MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
                surfaceView.getHolder().getSurface());

对于这个版本的 ExoPlayer,似乎需要使用 C.MSG_SET_SURFACE 创建 ExoPlayer.ExoPlayerMessage 的实例,并通过方法 sendMessage().

将其传递给播放器