如何将非简单的 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 组件的配置。您可以使用 sendMessages
或 blockingSendMessages
方法向组件发送消息。在您的情况下,您可以使用 SurfaceView
实例设置 videoRenderer
的 Surface
。例如:
player.sendMessage(videoRenderer,
MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
surfaceView.getHolder().getSurface());
对于这个版本的 ExoPlayer,似乎需要使用 C.MSG_SET_SURFACE
创建 ExoPlayer.ExoPlayerMessage
的实例,并通过方法 sendMessage()
.
将其传递给播放器
我不能使用 SimpleExoPlayer
,因为我需要一个带有特定参数的视频渲染器。我发现我可以将视频和音频渲染器传递给 ExoPlayer
:
final ExoPlayer player = ExoPlayerFactory.newInstance( new Renderer[]{videoRenderer, audioRenderer}, trackSelector, loadControl);
但是 ExoPlayer
没有方法 setVideoSurfaceView()
。
如何将 SurfaceView
传递给非简单的 ExoPlayer?
您可以通过 ExoPlayer 实例传递消息来更改各种 ExoPlayer 组件的配置。您可以使用 sendMessages
或 blockingSendMessages
方法向组件发送消息。在您的情况下,您可以使用 SurfaceView
实例设置 videoRenderer
的 Surface
。例如:
player.sendMessage(videoRenderer,
MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
surfaceView.getHolder().getSurface());
对于这个版本的 ExoPlayer,似乎需要使用 C.MSG_SET_SURFACE
创建 ExoPlayer.ExoPlayerMessage
的实例,并通过方法 sendMessage()
.