吃饭睡觉 發表於 2025-11-2 10:54:00

FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV

<span data-cke-copybin-start="1"><span data-cke-copybin-start="1">​</span></span><span id="cke_bm_215S">MyTV是一款使用Android原生开发的网络直播软件,它的原理是接入网络上的直播推流链接,通过Android提供的ExoPlayer来播放直播节目。有关网络推拉流的直播技术可参考《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 &nbsp;FFmpeg推流和拉流”。</span>
<p><span id="cke_bm_215S"> MyTV的源码托管地址为https://github.com/yaoxieyoulei/mytv-android(星星数0.7k),国内的镜像地址为https://gitcode.com/gh_mirrors/my/mytv-android。最新版本是2024年12月发布的tv2.2.7,可见该框架的源码更新十分及时,该版本的源码下载链接为https://github.com/yaoxieyoulei/mytv-android/archive/refs/tags/tv2.2.7.tar.gz。<br>
MyTV的源码采用Kotlin+Compose编写,适合Android开发者用作进阶练习,不过由于MyTV引入了最新的Android开发技术,因此需要使用较新的Android Studio才能成功导入运行。<br>
这里以Android Studio Ladybug(小瓢虫版本)为例,介绍如何在App工程中运行MyTV,详细的操作步骤如下。</span></p>
<h1>一、导入MyTV源码</h1>
<p>解压下载后的MyTV源码,打开settings.gradle.kts,在两处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%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")}</code></pre>
</div>
<p>增加以上配置的目的是引入国内的仓库地址,以便加快相关依赖包的下载速度。</p>
<h1>二、配置直播源</h1>
<p>因为MyTV的视频源来自网络上的直播推流链接,所以只有提供有效的直播地址才能正常观看。直播源地址来自下面源码里的IPTV_SOURCE_URL变量:app\src\main\java\top\yogiczy\mytv\data\utils\Constants.kt。</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="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22const%20val%20IPTV_SOURCE_URL%20%3D%5Cn%C2%A0%20%C2%A0%20%5C%22https%3A%2F%2Fmirror.ghproxy.com%2Fhttps%3A%2F%2Fraw.githubusercontent.com%2Ffanmingming%2Flive%2Fmain%2Ftv%2Fm3u%2Fipv6.m3u%5C%22%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">const val IPTV_SOURCE_URL =
&nbsp; &nbsp; "https://mirror.ghproxy.com/https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/ipv6.m3u"</code></pre>
</div>
<p>如果发现无法浏览直播画面,就得检查Constants.kt里面IPTV_SOURCE_URL配置的URL地址能否正常访问。如果不能访问,就要替换成有效可用的IPTV源地址文件。</p>
<h1>三、运行MyTV</h1>
<p>解决了直播源的链接问题之后,把MyTV安装到手机上,启动App的初始界面如下图所示:<span class="cke_image_resizer_wrapper"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸">​</span></span></p>
<div class="cke_widget_wrapper cke_widget_block 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_reset cke_widget_drag_handler_container"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202510/729938-20251005180726553-812903545.jpg"></span></span></span></div>
<p>可见MyTV默认播放网络上的直播节目。上下滑动屏幕,可以切换直播频道,也可以点击菜单按钮,屏幕会弹出详细的设置菜单列表如下图所示,方便用户快速修改相关的直播设置信息。</p>
<div class="cke_widget_wrapper cke_widget_block 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">
<p class="img-center cke_widget_element" data-cke-widget-data="%7B%22hasCaption%22%3Afalse%2C%22src%22%3A%22https%3A%2F%2Fi-blog.csdnimg.cn%2Fdirect%2F3895d818ed2847478862d53dcfe5f7b8.png%22%2C%22alt%22%3A%22%22%2C%22width%22%3A%22564%22%2C%22height%22%3A%22340%22%2C%22lock%22%3Atrue%2C%22align%22%3A%22center%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="image"><span class="cke_image_resizer_wrapper"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸">​<img src="https://img2024.cnblogs.com/blog/729938/202510/729938-20251005180747255-964751316.png"></span></span></p>
</div>
<p>当然,你也可以把MyTV安装到基于Android系统的智能电视上,MyTV的遥控器操作方式与主流电视直播软件类似;<br>
1、频道切换:使用上下方向键,或者数字键切换频道;屏幕上下滑动;<br>
2、频道选择:OK键;单击屏幕;<br>
3、设置页面:按下菜单、帮助键,长按OK键;双击、长按屏幕;<br>
若想收藏某个直播频道,可以打开应用选台界面,选中某一频道,长按OK键、长按屏幕,将收藏或取消收藏该频道。若想切换显示收藏列表,首先移动到频道列表顶部,然后再次按下方向键上,将切换显示收藏列表。</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/19126694
頁: [1]
查看完整版本: FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV