如何在ExoPlayer中使用PreparedAsync

时间:2017-06-07 09:36:48

标签: android exoplayer

我有一个使用ExoPlayer的应用程序。但是在开始之前就已经这样做了,我需要知道Prepared已经准备好了。

我在ExoPlayer中找不到PreparedAsync。因此,应用程序崩溃

跑步和训练是两回事。

我需要知道准备工作何时结束,以获得视频轨道的长度。

我需要任何建议。已经4天我绞尽脑汁了。帮助开发人员((

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

// Measures bandwidth during playback. Can be null if not required.
        DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
// Produces DataSource instances through which media data is loaded.
        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
                Util.getUserAgent(this, "com.yourapp.appname"), bandwidthMeter);
// Produces Extractor instances for parsing the media data.
        ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
// This is the MediaSource representing the media to be played.
        MediaSource videoSource = new ExtractorMediaSource(uri,
                dataSourceFactory, extractorsFactory, null, null);
// Prepare the player with the source.
        exoPlayer.prepare(videoSource);

答案 1 :(得分:0)

您应该添加一个监听器。当状态发生变化时,将调用其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: Jens Klingenberg