FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
<span data-cke-copybin-start="1"><span data-cke-copybin-start="1"></span></span><span id="cke_bm_975S">QPlayer2是七牛云基于FFmpeg6.1研发并开源的国产播放器,它可运行于Android和iOS系统,既支持播放本地视频文件,也支持播放网络上的流媒体链接。有关FFmpeg在Android平台的集成说明参见《FFmpeg开发实战:从零基础到短视频上线》一书的“第12章 FFmpeg的移动开发”。</span><p><span id="cke_bm_975S"> 之前的文章《使用国产的RedPlayer播放器观看网络视频》介绍了另一款由小红书研发的国产播放器RedPlayer,本来RedPlayer已经很好用了,谁知QPlayer2又横空出世,不仅基于FFmpeg6.1,还新增了画面旋转/镜像/缩放能力,其Demo工程甚至适配到了Android 15(即API 35)。<br>
这里以Android Studio Dolphin(小海豚版本)为例,介绍如何在App工程中运行QPlayer2,详细的操作步骤如下。<br>
QPlayer2适配不同系统的源码分开托管,其中Android版本的源码托管地址为https://github.com/pili-engineering/QPlayer2-Android。因为QPlayer2的最新源码基于Gradle8.7,与Android Studio Dolphin(小海豚版本),所以为了让小海豚版本能够打开QPlayer2源码,需要对Qplayer2Demo目录下的工程配置做如下改动:<br>
1、打开gradle\wrapper\gradle-wrapper.properties,把下面这行</span></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="12" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22distributionUrl%3Dhttps%5C%5C%3A%2F%2Fservices.gradle.org%2Fdistributions%2Fgradle-8.7-bin.zip%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip</code></pre>
</div>
<p>改成下面这行,也就是把Gradle8.7降级到Gradle7.2。</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="11" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22distributionUrl%3Dhttps%5C%5C%3A%2F%2Fservices.gradle.org%2Fdistributions%2Fgradle-7.2-bin.zip%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip</code></pre>
</div>
<p>2、打开项目级别的build.gradle,把下面这行</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="10" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22classpath%20'com.android.tools.build%3Agradle%3A8.6.1'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">classpath 'com.android.tools.build:gradle:8.6.1'</code></pre>
</div>
<p>改成下面这行,也就是把gradle8.6.1降级到gradle7.1.2。</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="9" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22classpath%20'com.android.tools.build%3Agradle%3A7.1.2'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">classpath 'com.android.tools.build:gradle:7.1.2'</code></pre>
</div>
<p>3、依次选择菜单:File→Settings→Build,Execution,Deployment→Build Tools→Gradle,把Gradle JDK栏的版本调整为JDK17。<br>
4、打开模块级别的build.gradle,把android节点内部的下面这行</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="8" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22compileSdk%2035%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">compileSdk 35</code></pre>
</div>
<p>改成下面这行,也就是把编译SDK版本从API35降级到API34。</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%22compileSdk%2034%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">compileSdk 34</code></pre>
</div>
<p>5、打开模块级别的build.gradle,把dependencies节点内部的下面四行</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%22implementation%20%5C%22org.jetbrains.kotlin%3Akotlin-stdlib%3A2.0.20%5C%22%5Cnimplementation%20'androidx.core%3Acore-ktx%3A1.15.0'%5Cnimplementation%20'androidx.appcompat%3Aappcompat%3A1.7.0'%5Cnimplementation%20'androidx.constraintlayout%3Aconstraintlayout%3A2.2.0'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">implementation "org.jetbrains.kotlin:kotlin-stdlib:2.0.20"
implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'</code></pre>
</div>
<p>改成下面三行,也就是把相关依赖库统统降级。</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%22implementation%20'androidx.core%3Acore-ktx%3A1.12.0'%5Cnimplementation%20'androidx.appcompat%3Aappcompat%3A1.6.1'%5Cnimplementation%20'androidx.constraintlayout%3Aconstraintlayout%3A2.0.4'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'</code></pre>
</div>
<p>完成以上配置修改之后,再编译Qplayer2Demo工程,然后安装到手机的QPlayer2首页如下图所示:</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/202507/729938-20250705123436405-1487172111.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/202507/729938-20250705123505803-1372611878.jpg"></span></span></span></span></p>
<p>回到首页,点击下方的双播放器按钮,打开双播放器的演示页面如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/729938/202507/729938-20250705123523755-2119084610.jpg"></p>
<p>可见QPlayer2能够正常播放网络视频。</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/18967126
頁:
[1]