あなたはリスナーを追加する必要があります。そのonPlayerStateChangedは、状態変化が発生したときに呼び出されます
注意をそのすべての場合」再生しようとすると、できるだけ早く再生を開始するので、再生を開始することをプレイヤーに指示する準備ができるまで待つ必要はありません。setPlayWhenReady(true)
に電話するだけですぐに再生が開始されます可能であれば
例:
public class MainActivity extends AppCompatActivity {
private ExoPlayer exoPlayer;
private SurfaceView surfaceView;
private int RENDERER_COUNT = 300000;
private int minBufferMs = 250000;
private final int BUFFER_SEGMENT_SIZE = 64 * 1024;
private final int BUFFER_SEGMENT_COUNT = 256;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView= (SurfaceView) findViewById(R.id.surfaceView);
String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0";
String url = "http://www.sample-videos.com/video/mp4/480/big_buck_bunny_480p_5mb.mp4";
Allocator allocator = new DefaultAllocator(minBufferMs);
DataSource dataSource = new DefaultUriDataSource(this, null, userAgent);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(Uri.parse(url), dataSource, allocator,
BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
MediaCodecVideoTrackRenderer videoRenderer = new
MediaCodecVideoTrackRenderer(this, sampleSource, MediaCodecSelector.DEFAULT,
MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT);
exoPlayer = ExoPlayer.Factory.newInstance(RENDERER_COUNT);
exoPlayer.prepare(videoRenderer, audioRenderer);
exoPlayer.sendMessage(videoRenderer,
MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
surfaceView.getHolder().getSurface());
exoPlayer.setPlayWhenReady(true);
}
}
BY:?イェンスKlingenberg
Акакиспользовать非同期の準備| Media Playerには、prepareAsyncがあります。そして、ここにはない –