exoplayer
exomedia
compile 'com.google.android.exoplayer:exoplayer:r2.4.1'
compile 'com.devbrackets.android:exomedia:4.0.2'
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<activity
android:name=".ui.activity.XunshiVideoDemoActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait">
</activity>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--exomedia-->
<com.devbrackets.android.exomedia.ui.widget.VideoView
android:id="@+id/exomedia_videoview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
app:useDefaultControls="true"/>
</RelativeLayout>
兼容性问题解决
从github下载Exoplayer-release.zip,将extensions中的okhttp扩展文件夹中的OkHttpDataSourse.java和OkHttpDataSourceFactory.java文件考入自己的工程中.
自定义Application继承父类,调用兼容性解决方法.
public class XunshiVideoDemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//兼容性配置
configureExoMedia();
}
/**
* 机型适配
*/
private void configureExoMedia() {
// 把MediaSources注册使用Okhttp客户端,而不是apache标准
// OkHttpDataSourceFactory指的是---->Exoplayer扩展库的`extension-okhttp`
ExoMedia.setHttpDataSourceFactoryProvider(new ExoMedia.HttpDataSourceFactoryProvider() {
@NonNull
@Override
public HttpDataSource.BaseFactory provide(@NonNull String userAgent, @Nullable TransferListener<? super DataSource> listener) {
return new OkHttpDataSourceFactory(new OkHttpClient(), userAgent, listener);
}
});
}
}
import com.devbrackets.android.exomedia.ui.widget.VideoView;
public class XunshiVideoDemoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//声明VideoView
VideoView mVideoView;
//反射
mVideoView = (VideoView) findViewById(R.id.exomedia_videoview);
//设置播放路径
mVideoView.setVideoURI(Uri.parse("http://www.asdfzxcv.cn/demovideo.mp4"));
//开始播放
mVideoView.start();
}
}
此时已经可以加载并观看视频了.
Button btnOrient;
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//切换到了横屏
//按钮的图标变化
btnOrient.setBackground(getResources().getDrawable(R.drawable.fullscreen_exit));
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//切换到了竖屏
//按钮的图标变化
btnOrient.setBackground(getResources().getDrawable(R.drawable.fullscreen));
}
super.onConfigurationChanged(newConfig);
}
void mVideoView.start();
void mVideoView.restart();
void mVideoView.pause();
void mVideoView.release();
boolean mVideoView.isPlaying();
boolean pausedInOnStop = false;
@Override
protected void onStart() {
super.onStart();
if (mVideoView != null) {
if (pausedInOnStop) {
mVideoView.start();
pausedInOnStop = false;
}
}
}
@Override
protected void onStop() {
super.onStop();
if (mVideoView != null) {
if (mVideoView.isPlaying()) {
pausedInOnStop = true;
mVideoView.pause();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mVideoView != null) {
mVideoView.release();
}
}
自定义播放器UI及事件监听请点击下面链接: