gpt4 book ai didi

android - Exoplayer 只播放一些 .m3u8 链接,其他的只是加载时间但不开始播放

转载 作者:行者123 更新时间:2023-11-30 05:09:13 30 4
gpt4 key购买 nike

我刚刚将 exoplayer 设置为播放 .m3u8 视频。但是有些视频正在播放,如果某些链接没有播放,则只有加载时间。

"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8 "

这个链接播放...

"https://hl.bobtor.com/hl/Mortal.Engines.2018.HDCAM.x264.AC3-MP4KiNG.m3u8 "

此链接未播放,仅在加载时播放

这是我的代码

公共(public)类 MainActivity 扩展了 AppCompatActivity {

private final String STATE_RESUME_WINDOW = "resumeWindow";
private final String STATE_RESUME_POSITION = "resumePosition";
private final String STATE_PLAYER_FULLSCREEN = "playerFullscreen";

private SimpleExoPlayerView mExoPlayerView;
private MediaSource mVideoSource;
private boolean mExoPlayerFullscreen = false;
private FrameLayout mFullScreenButton;
private ImageView mFullScreenIcon;
private Dialog mFullScreenDialog;

private int mResumeWindow;
private long mResumePosition;


@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState != null) {
mResumeWindow = savedInstanceState.getInt(STATE_RESUME_WINDOW);
mResumePosition = savedInstanceState.getLong(STATE_RESUME_POSITION);
mExoPlayerFullscreen = savedInstanceState.getBoolean(STATE_PLAYER_FULLSCREEN);
}
}


@Override
public void onSaveInstanceState(Bundle outState) {

outState.putInt(STATE_RESUME_WINDOW, mResumeWindow);
outState.putLong(STATE_RESUME_POSITION, mResumePosition);
outState.putBoolean(STATE_PLAYER_FULLSCREEN, mExoPlayerFullscreen);

super.onSaveInstanceState(outState);
}


private void initFullscreenDialog() {

mFullScreenDialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen) {
public void onBackPressed() {
if (mExoPlayerFullscreen)
closeFullscreenDialog();
super.onBackPressed();
}
};
}


private void openFullscreenDialog() {

((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView);
mFullScreenDialog.addContentView(mExoPlayerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_fullscreen_skrink));
mExoPlayerFullscreen = true;
mFullScreenDialog.show();
}


private void closeFullscreenDialog() {

((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView);
((FrameLayout) findViewById(R.id.main_media_frame)).addView(mExoPlayerView);
mExoPlayerFullscreen = false;
mFullScreenDialog.dismiss();
mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_fullscreen_expand));
}


private void initFullscreenButton() {

PlaybackControlView controlView = mExoPlayerView.findViewById(R.id.exo_controller);
mFullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon);
mFullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button);
mFullScreenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mExoPlayerFullscreen)
openFullscreenDialog();
else
closeFullscreenDialog();
}
});
}


private void initExoPlayer() {

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl();
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), trackSelector, loadControl);
mExoPlayerView.setPlayer(player);

boolean haveResumePosition = mResumeWindow != C.INDEX_UNSET;

if (haveResumePosition) {
mExoPlayerView.getPlayer().seekTo(mResumeWindow, mResumePosition);
}

mExoPlayerView.getPlayer().prepare(mVideoSource);
mExoPlayerView.getPlayer().setPlayWhenReady(true);
}


@Override
protected void onResume() {

super.onResume();

if (mExoPlayerView == null) {

mExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exoplayer);
initFullscreenDialog();
initFullscreenButton();


Intent in = getIntent();
// String streamUrl = in.getStringExtra("url");//in.getIntExtra("pos", 0);



String streamUrl = "https://hl.bobtor.com/hl/Mortal.Engines.2018.HDCAM.x264.AC3-MP4KiNG.m3u8";//"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8";
String userAgent = Util.getUserAgent(MainActivity.this, getApplicationContext().getApplicationInfo().packageName);
DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent, null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true);
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(MainActivity.this, null, httpDataSourceFactory);
Uri daUri = Uri.parse(streamUrl);

mVideoSource = new HlsMediaSource(daUri, dataSourceFactory, 1, null, null);
}

initExoPlayer();

if (mExoPlayerFullscreen) {
((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView);
mFullScreenDialog.addContentView(mExoPlayerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_fullscreen_skrink));
mFullScreenDialog.show();
}
}


@Override
protected void onPause() {

super.onPause();

if (mExoPlayerView != null && mExoPlayerView.getPlayer() != null) {
mResumeWindow = mExoPlayerView.getPlayer().getCurrentWindowIndex();
mResumePosition = Math.max(0, mExoPlayerView.getPlayer().getContentPosition());

mExoPlayerView.getPlayer().release();
}

if (mFullScreenDialog != null)
mFullScreenDialog.dismiss();
}
}

最佳答案

我无法打开您的网址,但从网址中我可以看到流正在使用 AC3 编解码器。 ExoPlayer 不支持 AC3 编解码器。您需要为 ExoPlayer 使用 FFmpeg 扩展。

https://google.github.io/ExoPlayer/supported-formats.html

关于android - Exoplayer 只播放一些 .m3u8 链接,其他的只是加载时间但不开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53996428/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com