济南城乡建设官方网站,wordpress自动水印代码,wordpress 静态页,公司注销后 网站备案吗Android早期的MediaPlayer控件对于网络视频的兼容性很差#xff0c;所以后来单独推出了Exoplayer库增强支持网络视频#xff0c;在《Android Studio开发实战#xff1a;从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…Android早期的MediaPlayer控件对于网络视频的兼容性很差所以后来单独推出了Exoplayer库增强支持网络视频在《Android Studio开发实战从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细用法。 现在Android官方再次升级Exoplayer并将其纳入了Jetpack的Media3第三代媒体库作为音视频相关操作的统一处理引擎。升级后的Exoplayer就成为Media3的统一媒体播放引擎提供了音频和视频播放的应用级组件意欲在音视频渲染方向上一统江湖。 根据Android官网的介绍ExoPlayer还摆脱设备和操作系统碎片化问题让App代码以一致的方式运行于整个Android生态系统中。因为Media3是个很新很新的Jetpack库所以它对开发环境要求比较高需满足下列条件才能正常引入Media3。 1、开发工具要选用Android Studio Jellyfish小水母版本或更高版本。 2、Gradle版本不低于8.6。 3、App模块的build.gradle里面compileSdk和targetSdk要升级到34或者更高版本。 根据上述条件准备好了开发环境再按照以下描述引入Media3的ExoPlayer库详细步骤说明如下。
一、修改模块的build.gradle
在build.gradle的dependencies节点内部补充下面的导包语句把ExoPlayer用到的相关库都加进来。
implementation androidx.media3:media3-exoplayer:1.4.0
implementation androidx.media3:media3-exoplayer-hls:1.4.0
implementation androidx.media3:media3-exoplayer-rtsp:1.4.0
implementation androidx.media3:media3-ui:1.4.0
implementation androidx.media3:media3-common:1.4.0
implementation androidx.media3:media3-session:1.4.0
implementation androidx.media3:media3-datasource:1.4.0
implementation androidx.media3:media3-datasource-rtmp:1.4.0
二、编辑播放界面的布局文件
打开播放界面的XML布局文件给根布局添加如下的属性配置
xmlns:apphttp://schemas.android.com/apk/res-auto
接着在布局内部添加来自ExoPlayer库的PlayerView控件节点举例如下
!-- use_controller是否显示控制栏show_timeout控制栏的消失间隔show_buffering是否显示缓冲区resize_mode大小调整模式 --
androidx.media3.ui.PlayerViewandroid:idid/pv_contentandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentapp:show_bufferingalwaysapp:show_timeout5000app:use_controllertrueapp:resize_modefit/
三、活动页面代码增加ExoPlayer的处理代码
首先补充下面一行代码声明PlayerView对象
private ExoPlayer mPlayer; // 声明一个新型播放器对象
接着在onCreate方法里面补充以下代码获取PlayerView对象并对其设置ExoPlayer的播放器对象 PlayerView pv_content findViewById(R.id.pv_content);mPlayer new ExoPlayer.Builder(this).build();pv_content.setPlayer(mPlayer); // 设置播放器视图的播放器对象
然后添加下面的播放方法开始播放指定链接的网络视频。
// 播放视频
private void playVideo(Uri uri) {DataSource.Factory factory new DefaultDataSource.Factory(this);// 创建指定地址的媒体对象MediaItem videoItem new MediaItem.Builder().setUri(uri).build();// 基于工厂对象和媒体对象创建媒体来源MediaSource videoSource;if (uri.getPath().endsWith(m3u8)) { // hls链接videoSource new HlsMediaSource.Factory(factory).createMediaSource(videoItem);} else if (uri.getPath().startsWith(rtsp)) { // rtsp链接videoSource new RtspMediaSource.Factory().createMediaSource(videoItem);} else if (uri.getPath().startsWith(rtmp)) { // rtmp链接videoSource new ProgressiveMediaSource.Factory(new RtmpDataSource.Factory()).createMediaSource(videoItem);} else { // 其他链接http开头或https开头的普通视频链接videoSource new ProgressiveMediaSource.Factory(factory).createMediaSource(videoItem);}mPlayer.setMediaSource(videoSource); // 设置播放器的媒体来源mPlayer.prepare(); // 播放器准备就绪mPlayer.play(); // 播放器开始播放
}
从上述的播放代码可知这里用到了ExoPlayer的四种播放形式分别为播放HLS链接、播放RTMP链接、播放RTSP链接、播放普通网络视频。
四、给AndroidManifest.xml补充互联网访问权限
打开AndroidManifest.xml添加下面的互联网权限配置
uses-permission android:nameandroid.permission.INTERNET /
最后编译运行App在真机上看到的播放器效果如下图所示。 可见成功把Media3的ExoPlayer库跑了起来并且正常播放网络视频。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战从零基础到短视频上线》一书。 本系列的FFmpeg进阶文章目录为《FFmpeg开发笔记全目录FFmpeg开发实战详解含直播系统的搭建过程》