我需要以格式.mpd。
重现exoplayer
的现场表演
但是我收到了这个错误:
com.google.android.exoplayer2.source.UnrecognizedInputFormatException: 没有可用的提取器(MatroskaExtractor, FragmentedMp4Extractor,Mp4Extractor,Mp3Extractor,AdtsExtractor, Ac3Extractor,TsExtractor,FlvExtractor,OggExtractor,PsExtractor, WavExtractor)可以读取流。
我不知道为什么!
这是我的代码:
public class MainActivity extends AppCompatActivity {
SimpleExoPlayer exoPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleExoPlayerView exoPlayerView;
exoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exo_player_view);
exoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
try {
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
Uri videoURI = Uri.parse("blablabla/manifest.mpd");
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(videoURI, dataSourceFactory, extractorsFactory, null, null);
exoPlayerView.setPlayer(exoPlayer);
exoPlayer.prepare(mediaSource);
exoPlayer.setPlayWhenReady(true);
}catch (Exception e){
Log.e("MainAcvtivity"," exoplayer error "+ e.toString());
}
}
@Override
protected void onDestroy() {
super.onDestroy();
exoPlayer.stop();
}
@Override
protected void onPause() {
super.onPause();
exoPlayer.stop();
}
}
答案 0 :(得分:0)
.mpd通常指向DASH清单,它是一种自适应格式。清单列出了玩家可以适应给定带宽条件的不同质量的媒体表示。
要播放DASH清单(.mpd),您需要创建DASH特定媒体源。
使用DashMediaSource
代替ExtractorsMediaSource
:
// meter bandwidth with media files (video/audio)
DefaultHttpDataSourceFactory mediaDataSourceFactory = new DefaultHttpDataSourceFactory(
Util.getUserAgent(this, "stackoverflow"), BANDWIDTH_METER);
// do not meter bandwidth for manifest loading
DefaultHttpDataSourceFactory manifestDataSourceFactory = new DefaultHttpDataSourceFactory(
Util.getUserAgent(this, "stackoverflow"));
// create the media source for DASH
MediaSource mediaSource = new DashMediaSource.Factory(
new DefaultDashChunkSource.Factory(mediaDataSourceFactory),
manifestDataSourceFactory)
.createMediaSource(uri, null, null);
// prepare the player
player.setPlayWhenReady(true);
player.prepare(mediaSource);