有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用exoplayer播放m3u8文件的java

我正在尝试将Exo player嵌入到我的Android应用程序中以播放m3u8文件,但它不起作用

我使用下面的代码启动播放器活动

import 安卓.content.pm.ActivityInfo;
import 安卓.net.Uri;
import 安卓.os.Bundle;
import 安卓.os.Handler;
import 安卓.view.View;
import 安卓.view.Window;
import 安卓.view.WindowManager;
import 安卓.widget.ImageView;
import 安卓.widget.ProgressBar;

import 安卓x.annotation.Nullable;
import 安卓x.appcompat.app.AppCompatActivity;

import com.google.安卓.exoplayer2.DefaultLoadControl;
import com.google.安卓.exoplayer2.ExoPlaybackException;
import com.google.安卓.exoplayer2.ExoPlayerFactory;
import com.google.安卓.exoplayer2.LoadControl;
import com.google.安卓.exoplayer2.PlaybackParameters;
import com.google.安卓.exoplayer2.Player;
import com.google.安卓.exoplayer2.SimpleExoPlayer;
import com.google.安卓.exoplayer2.Timeline;
import com.google.安卓.exoplayer2.source.ExtractorMediaSource;
import com.google.安卓.exoplayer2.source.MediaSource;
import com.google.安卓.exoplayer2.source.TrackGroupArray;
import com.google.安卓.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.安卓.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.安卓.exoplayer2.trackselection.TrackSelectionArray;
import com.google.安卓.exoplayer2.trackselection.TrackSelector;
import com.google.安卓.exoplayer2.ui.PlayerView;
import com.google.安卓.exoplayer2.upstream.BandwidthMeter;
import com.google.安卓.exoplayer2.upstream.DataSource;
import com.google.安卓.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.安卓.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.安卓.exoplayer2.util.Util;


public class VideoPlayerActivity extends AppCompatActivity {

    private PlayerView videoPlayer;
    private SimpleExoPlayer simpleExoPlayer;
    private static final String FILE_URL = "";
    ProgressBar progressBar;
    ImageView btFullScreen;
    boolean flag = false;
    Handler mainHandler = new Handler();



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_video_player);

        videoPlayer = findViewById(R.id.exo_player);
        progressBar = findViewById(R.id.progress_bar);
        btFullScreen = videoPlayer.findViewById(R.id.bt_fullscreen);
        setUpExoplayer(getIntent().getStringExtra("url"));
        simpleExoPlayer.addListener(new Player.EventListener() {
            @Override
            public void onTimelineChanged(Timeline timeline, @Nullable Object manifest, int reason) {

            }

            @Override
            public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {

            }

            @Override
            public void onLoadingChanged(boolean isLoading) {

            }

            @Override
            public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {

                if (playbackState == Player.STATE_BUFFERING) {

                    progressBar.setVisibility(View.VISIBLE);

                } else if (playbackState == Player.STATE_READY) {

                    progressBar.setVisibility(View.GONE);

                }
            }

            @Override
            public void onRepeatModeChanged(int repeatMode) {

            }

            @Override
            public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {

            }

            @Override
            public void onPlayerError(ExoPlaybackException error) {

            }

            @Override
            public void onPositionDiscontinuity(int reason) {

            }

            @Override
            public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {

            }

            @Override
            public void onSeekProcessed() {

            }
        });

        btFullScreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (flag) {

                    btFullScreen.setImageDrawable(getResources().getDrawable(R.drawable.ic_fullscreen));
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    flag = false;
                } else {

                    btFullScreen.setImageDrawable(getResources().getDrawable(R.drawable.ic_fullscreen_exit));

                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

                    flag = true;
                }

            }
        });
    }

    private void setUpExoplayer(String url) {

        LoadControl loadControl = new DefaultLoadControl();

        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

        TrackSelector trackSelector = new DefaultTrackSelector(

                new AdaptiveTrackSelection.Factory(bandwidthMeter)
        );

        simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
        videoPlayer.setPlayer(simpleExoPlayer);
        DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "Livefootballarena"));
        MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(url));
        
        videoPlayer.setKeepScreenOn(true);
        simpleExoPlayer.prepare(mediaSource);
        simpleExoPlayer.setPlayWhenReady(true);
    }
    @Override
    protected void onPause() {
        super.onPause();
        simpleExoPlayer.setPlayWhenReady(true);
        simpleExoPlayer.getPlaybackState();
    }


    @Override
    protected void onRestart() {
        super.onRestart();
        simpleExoPlayer.setPlayWhenReady(true);
        simpleExoPlayer.getPlaybackState();
    }


}

}


我已经为此挣扎了一段时间,但如果我将hls源更改为mediasource,我可以播放mp4视频


共 (0) 个答案