FFmpeg开发笔记(九十九)基于Kotlin的国产开源播放器DKVideoPlayer
<span id="cke_bm_197S">在Android平台上,基于FFmpeg的国产播放器开源框架也有很多了,前有哔哩哔哩的ijkplayer,后有小红书的RedPlayer,参见之前的文章《使用国产的ijkplayer播放器观看网络视频》和《使用国产的RedPlayer播放器观看网络视频》。</span><p><span id="cke_bm_197S"> 除此以外,DKVideoPlayer也是一款优秀的国产Android视频播放器,它基于Kotlin编写,不但集成了Android原生的MediaPlayer,还集成了Jetpack的ExoPlayer,甚至集成了国产的ijkplayer。DKVideoPlayer既支持播放本地视频,也支持播放网络视频,甚至支持播放直播链接,可谓功能强大。<br>
DKVideoPlayer的源码托管地址为https://github.com/Doikki/DKVideoPlayer(星星数5.3k),国内的镜像地址为https://gitcode.com/gh_mirrors/dk/DKVideoPlayer,最新版本是2022年7月发布的v3.3.7,可见该框架的源码更新十分及时,该版本的源码下载地址为https://github.com/Doikki/DKVideoPlayer/archive/refs/tags/3.3.7.tar.gz。<br>
DKVideoPlayer提供了两种集成方式,引用在线库、直接导入源码,分别说明如下:</span></p>
<h1>一、引用DKVideoPlayer在线库</h1>
<p>Android工程引用DKVideoPlayer在线库时,需要修改以下两个配置:<br>
1、打开模块级别的build.gradle,给dependencies节点补充下面几行配置,表示引入3.3.7版本的DKVideoPlayer库:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22%23%20%E5%BF%85%E9%80%89%EF%BC%8C%E5%86%85%E9%83%A8%E9%BB%98%E8%AE%A4%E4%BD%BF%E7%94%A8%E7%B3%BB%E7%BB%9Fmediaplayer%E8%BF%9B%E8%A1%8C%E8%A7%A3%E7%A0%81%5Cnimplementation%20'xyz.doikki.android.dkplayer%3Adkplayer-java%3A3.3.7'%5Cn%23%20%E5%8F%AF%E9%80%89%EF%BC%8C%E5%8C%85%E5%90%ABStandardVideoController%E7%9A%84%E5%AE%9E%E7%8E%B0%5Cnimplementation%20'xyz.doikki.android.dkplayer%3Adkplayer-ui%3A3.3.7'%5Cn%23%20%E5%8F%AF%E9%80%89%EF%BC%8C%E4%BD%BF%E7%94%A8exoplayer%E8%BF%9B%E8%A1%8C%E8%A7%A3%E7%A0%81%5Cnimplementation%20'xyz.doikki.android.dkplayer%3Aplayer-exo%3A3.3.7'%5Cn%23%20%E5%8F%AF%E9%80%89%EF%BC%8C%E4%BD%BF%E7%94%A8ijkplayer%E8%BF%9B%E8%A1%8C%E8%A7%A3%E7%A0%81%5Cnimplementation%20'xyz.doikki.android.dkplayer%3Aplayer-ijk%3A3.3.7'%5Cn%23%20%E5%8F%AF%E9%80%89%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E7%BC%93%E5%AD%98%E6%88%96%E8%80%85%E6%8A%96%E9%9F%B3%E9%A2%84%E5%8A%A0%E8%BD%BD%E5%8A%9F%E8%83%BD%E8%AF%B7%E5%BC%95%E5%85%A5%E6%AD%A4%E5%BA%93%5Cnimplementation%20'xyz.doikki.android.dkplayer%3Avideocache%3A3.3.7'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs"># 必选,内部默认使用系统mediaplayer进行解码
implementation 'xyz.doikki.android.dkplayer:dkplayer-java:3.3.7'
# 可选,包含StandardVideoController的实现
implementation 'xyz.doikki.android.dkplayer:dkplayer-ui:3.3.7'
# 可选,使用exoplayer进行解码
implementation 'xyz.doikki.android.dkplayer:player-exo:3.3.7'
# 可选,使用ijkplayer进行解码
implementation 'xyz.doikki.android.dkplayer:player-ijk:3.3.7'
# 可选,如需要缓存或者抖音预加载功能请引入此库
implementation 'xyz.doikki.android.dkplayer:videocache:3.3.7'</code></pre>
</div>
<p>2、打开App模块的src/main/AndroidManifest.xml,给manifest节点补充下面几行权限配置,表示声明悬浮窗、存储空间和网络等权限:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22%3Cuses-permission%20android%3Aname%3D%5C%22android.permission.SYSTEM_ALERT_WINDOW%5C%22%20%2F%3E%5Cn%3Cuses-permission%20android%3Aname%3D%5C%22android.permission.SYSTEM_OVERLAY_WINDOW%5C%22%20%2F%3E%5Cn%3Cuses-permission%20android%3Aname%3D%5C%22android.permission.WRITE_EXTERNAL_STORAGE%5C%22%20%2F%3E%5Cn%3Cuses-permission%20android%3Aname%3D%5C%22android.permission.INTERNET%5C%22%20%2F%3E%5Cn%3Cuses-permission%20android%3Aname%3D%5C%22android.permission.ACCESS_NETWORK_STATE%5C%22%2F%3E%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs"><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/></code></pre>
</div>
<h1>二、直接导入DKVideoPlayer源码</h1>
<p>DKVideoPlayer的源码已经适配Android Studio Dolphin(小海豚版本),仅需在项目级别的build.gradle补充国内仓库即可。也就是在repositories节点内部补充以下配置:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22%2F%2F%20%E4%BB%A5%E4%B8%8B%E5%9B%9B%E8%A1%8C%E6%B7%BB%E5%8A%A0%E9%98%BF%E9%87%8C%E4%BA%91%E7%9A%84%E4%BB%93%E5%BA%93%E5%9C%B0%E5%9D%80%EF%BC%8C%E6%96%B9%E4%BE%BF%E5%9B%BD%E5%86%85%E5%BC%80%E5%8F%91%E8%80%85%E4%B8%8B%E8%BD%BD%E7%9B%B8%E5%85%B3%E6%8F%92%E4%BB%B6%5Cnmaven%20%7B%20url%20%3D%20uri(%5C%22https%3A%2F%2Fmaven.aliyun.com%2Frepository%2Fjcenter%5C%22)%20%7D%5Cnmaven%20%7B%20url%20%3D%20uri(%5C%22https%3A%2F%2Fmaven.aliyun.com%2Frepository%2Fgoogle%5C%22)%7D%5Cnmaven%20%7B%20url%20%3D%20uri(%5C%22https%3A%2F%2Fmaven.aliyun.com%2Frepository%2Fgradle-plugin%5C%22)%7D%5Cnmaven%20%7B%20url%20%3D%20uri(%5C%22https%3A%2F%2Fmaven.aliyun.com%2Frepository%2Fpublic%5C%22)%7D%5Cn%2F%2F%20%E4%BB%A5%E4%B8%8B%E6%B7%BB%E5%8A%A0%E6%B8%85%E5%8D%8E%E5%A4%A7%E5%AD%A6%E7%9A%84%E4%BB%93%E5%BA%93%E5%9C%B0%E5%9D%80%5Cnmaven%20%7B%20url%20%3D%20uri(%5C%22https%3A%2F%2Fmirrors.tuna.tsinghua.edu.cn%2Frepository%2Fmaven-central%2F%5C%22)%20%7D%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">// 以下四行添加阿里云的仓库地址,方便国内开发者下载相关插件
maven { url = uri("https://maven.aliyun.com/repository/jcenter") }
maven { url = uri("https://maven.aliyun.com/repository/google")}
maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin")}
maven { url = uri("https://maven.aliyun.com/repository/public")}
// 以下添加清华大学的仓库地址
maven { url = uri("https://mirrors.tuna.tsinghua.edu.cn/repository/maven-central/") }</code></pre>
</div>
<p>增加以上配置的目的是引入国内的仓库地址,以便加快相关依赖包的下载速度。</p>
<p>等待DKVideoPlayer工程编译通过,把主入口的dkplayer-sample模块安装到手机上,启动之后的App界面如下图所示:</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202512/729938-20251221180441777-124194375.jpg"></span></span></span></span></p>
<p>点击【点播】按钮,打开网络视频的播放界面如下图所示:</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202512/729938-20251221180456662-462668323.jpg"></span></span></span></span></p>
<p>或者点击【直播】按钮,打开直播链接的播放界面如下图所示:</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202512/729938-20251221180522634-502106673.jpg"></span></span></span></span></p>
<p>可见DKVideoPlayer支持调整播放窗口大小、调整播放速度,以及旋转、截图、裁剪等功能,可谓将常见的播放操作一网打尽。</p>
<p>更多详细的FFmpeg开发知识参见<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">《FFmpeg开发实战:从零基础到短视频上线》一书。</span></p><br><br>
来源:https://www.cnblogs.com/aqi00/p/19379646
頁:
[1]