我有一个使用ExoPlayer的应用程序。但是在开始之前就已经这样做了,我需要知道Prepared已经准备好了。
我在ExoPlayer中找不到PreparedAsync。因此,应用程序崩溃
跑步和训练是两回事。
我需要知道准备工作何时结束,以获得视频轨道的长度。
我需要任何建议。已经4天我绞尽脑汁了。帮助开发人员((
答案 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