com.google.android.exoplayer2.source.UnrecognizedInputFormatException:

问题描述 投票:0回答:1

我需要用格式为.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();
    }
}
java android exoplayer
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.