gpt4 book ai didi

android - 谷歌 ExoPlayer 指南

转载 作者:太空狗 更新时间:2023-10-29 15:30:01 24 4
gpt4 key购买 nike

我正在努力使用 ExoPlayer 构建基本应用。

您好,我对“入门”部分有疑问。不知道需要使用什么才能播放视频或流。如何停止、播放、暂停...另一个问题是我不知道我在提供什么,例如,在 DefaultDataSourceFactory 构造函数中,为什么,我在有和没有一些参数的情况下得到了什么...我很困惑整个用法...请帮助!谢谢!

最佳答案

首先你需要在你的build.gradle中添加这个
编译'com.google.android.exoplayer:exoplayer:r2.1.1'

<强>1。您的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/player_view"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>

<强>2。你的类文件

public class ExoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
SimpleExoPlayer player;
String path; // it can be url of video for online streaming or a url of local video

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exoplayer);

// set your path here
path=<your path>;

// 1. Create a default TrackSelector
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =
new DefaultTrackSelector(videoTrackSelectionFactory);

// 2. Create a default LoadControl
LoadControl loadControl = new DefaultLoadControl();
// 3. Create the player
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

SimpleExoPlayerView playerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
playerView.setPlayer(player);
playerView.setKeepScreenOn(true);
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "ExoPlayer"));

// 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.parse(path),
dataSourceFactory, extractorsFactory, null, null);
// Prepare the player with the source.
player.addListener(this);
player.prepare(videoSource);
playerView.requestFocus();
player.setPlayWhenReady(true); // to play video when ready. Use false to pause a video
}


@Override
protected void onPause() {
super.onPause();
if (player != null) {
player.setPlayWhenReady(false); //to pause a video because now our video player is not in focus
}
}

@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {

}

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

}

@Override
public void onLoadingChanged(boolean isLoading) {

}

@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState) {
case ExoPlayer.STATE_BUFFERING:
//You can use progress dialog to show user that video is preparing or buffering so please wait
break;
case ExoPlayer.STATE_IDLE:
//idle state
break;
case ExoPlayer.STATE_READY:
// dismiss your dialog here because our video is ready to play now
break;
case ExoPlayer.STATE_ENDED:
// do your processing after ending of video
break;
}
}

@Override
public void onPlayerError(ExoPlaybackException error) {
// show user that something went wrong. I am showing dialog but you can use your way
AlertDialog.Builder adb = new AlertDialog.Builder(ExoPlayerActivity.this);
adb.setTitle("Could not able to stream video");
adb.setMessage("It seems that something is going wrong.\nPlease try again.");
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish(); // take out user from this activity. you can skip this
}
});
AlertDialog ad = adb.create();
ad.show();
}

@Override
public void onPositionDiscontinuity() {
//Video is not streaming properly
Log.d("Mayur", "Discontinuity");
}

@Override
protected void onDestroy() {
super.onDestroy();
player.release(); //it is important to release a player
}
}

我认为这对初学者来说已经足够了。另请记住,此库的标准音频和视频组件依赖于 Android 的 MediaCodec API,该 API 在 Android 4.1(API 级别 16)中发布。所以它不适用于android 4.0及以下版本。

关于android - 谷歌 ExoPlayer 指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41848293/

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