一、介绍

首先,先介绍一下这个项目
目前这个软件内置了53个电视节目,可以直接播放,并且支持手动输入链接播放视频,支持rtmp播放和网络视频。目前这个项目不太完善,但是还是有三个方向可以作为之后扩展的,1直播客户端,2视频播放器,3电视节目播放器。

电视节目取流地址来自:https://blog.csdn.net/qq_32502511/article/details/106855117
在此感谢作者(刘延林 | 梦陆)分享,侵删

app下载地址如下:
https://wws.lanzous.com/iuVtAgc4ygh
密码:bvtk

项目下载地址如下:
https://wws.lanzous.com/ixdUEga69qh
密码:3vxh

截图如下:




二、代码实现

本人制作的首页极其简陋,如有需要请自行修改。

首页代码如下:

<template><view class="content"><!-- 用for循环将每个节目的按钮及文字输出 --><view class="listview" v-for="(item,index) in tv_rtmp"><button v-on:click="to_tv(index)"><text>{{index+1}}{{item.name}}</text></button></view><!-- 自助播放,点击后需要输入地址 --><view class="other"><button v-on:click="play_other">自助播放</button></view><!-- 自定义的含输入框的弹出框 --><prompt ref="prompt" @onConfirm="onConfirm" @onCancel="onCancel" title="播放地址" text="请输入播放链接"></prompt></view>
</template><script>import prompt from '../../static/prompt.vue'; //导入自定义带输入框的弹出框export default {data() {return {//电视节目的取流地址及其电视台//电视节目取流地址来自:https://blog.csdn.net/qq_32502511/article/details/106855117//在此感谢作者(刘延林 | 梦陆)分享,侵删tv_rtmp: [{"name":"CCTV-1综合","path":"rtmp://58.200.131.2:1935/livetv/cctv1"},{"name":"CCTV-2财经","path":"rtmp://58.200.131.2:1935/livetv/cctv2"},{"name":"CCTV-3综艺","path":"rtmp://58.200.131.2:1935/livetv/cctv3"},{"name":"CCTV-4中文国际","path":"rtmp://58.200.131.2:1935/livetv/cctv4"},{"name":"CCTV-5体育","path":"rtmp://58.200.131.2:1935/livetv/cctv5"},{"name":"CCTV-6电影","path":"rtmp://58.200.131.2:1935/livetv/cctv6"},{"name":"CCTV-7军事农业","path":"rtmp://58.200.131.2:1935/livetv/cctv7"},{"name":"CCTV-8电视剧","path":"rtmp://58.200.131.2:1935/livetv/cctv8"},{"name":"CCTV-9记录","path":"rtmp://58.200.131.2:1935/livetv/cctv9"},{"name":"CCTV-10科教","path":"rtmp://58.200.131.2:1935/livetv/cctv10"},{"name":"CCTV-11戏曲","path":"rtmp://58.200.131.2:1935/livetv/cctv11"},{"name":"CCTV-12社会与法","path":"rtmp://58.200.131.2:1935/livetv/cctv12"},{"name":"CCTV-13新闻","path":"rtmp://58.200.131.2:1935/livetv/cctv13"},{"name":"CCTV-14少儿","path":"rtmp://58.200.131.2:1935/livetv/cctv14"},{"name":"CCTV-15音乐","path":"rtmp://58.200.131.2:1935/livetv/cctv15"},{"name":"安徽卫视","path":"rtmp://58.200.131.2:1935/livetv/ahtv"},{"name":"兵团卫视","path":"rtmp://58.200.131.2:1935/livetv/bttv"},{"name":"重庆卫视","path":"rtmp://58.200.131.2:1935/livetv/cqtv"},{"name":"东方卫视","path":"rtmp://58.200.131.2:1935/livetv/dftv"},{"name":"东南卫视","path":"rtmp://58.200.131.2:1935/livetv/dntv"},{"name":"广东卫视","path":"rtmp://58.200.131.2:1935/livetv/gdtv"},{"name":"广西卫视","path":"rtmp://58.200.131.2:1935/livetv/gxtv"},{"name":"甘肃卫视","path":"rtmp://58.200.131.2:1935/livetv/gstv"},{"name":"贵州卫视","path":"rtmp://58.200.131.2:1935/livetv/gztv"},{"name":"湖北卫视","path":"rtmp://58.200.131.2:1935/livetv/hbtv"},{"name":"湖南卫视","path":"rtmp://58.200.131.2:1935/livetv/hunantv"},{"name":"河北卫视","path":"rtmp://58.200.131.2:1935/livetv/hebtv"},{"name":"河南卫视","path":"rtmp://58.200.131.2:1935/livetv/hntv"},{"name":"黑龙江卫视","path":"rtmp://58.200.131.2:1935/livetv/hljtv"},{"name":"江苏卫视","path":"rtmp://58.200.131.2:1935/livetv/jstv"},{"name":"江西卫视","path":"rtmp://58.200.131.2:1935/livetv/jxtv"},{"name":"吉林卫视","path":"rtmp://58.200.131.2:1935/livetv/jltv"},{"name":"辽宁卫视","path":"rtmp://58.200.131.2:1935/livetv/lntv"},{"name":"内蒙古卫视","path":"rtmp://58.200.131.2:1935/livetv/nmtv"},{"name":"宁夏卫视","path":"rtmp://58.200.131.2:1935/livetv/nxtv"},{"name":"青海卫视","path":"rtmp://58.200.131.2:1935/livetv/qhtv"},{"name":"四川卫视","path":"rtmp://58.200.131.2:1935/livetv/sctv"},{"name":"山东卫视","path":"rtmp://58.200.131.2:1935/livetv/sdtv"},{"name":"山西卫视","path":"rtmp://58.200.131.2:1935/livetv/sxrtv"},{"name":"陕西卫视","path":"rtmp://58.200.131.2:1935/livetv/sxtv"},{"name":"山东教育","path":"rtmp://58.200.131.2:1935/livetv/sdetv"},{"name":"中国教育1","path":"rtmp://58.200.131.2:1935/livetv/cetv1"},{"name":"中国教育3","path":"rtmp://58.200.131.2:1935/livetv/cetv3"},{"name":"中国教育4","path":"rtmp://58.200.131.2:1935/livetv/cetv4"},{"name":"中国教育2","path":"rtmp://58.200.131.2:1935/livetv/cetv2"},{"name":"CCTV-第一剧场","path":"rtmp://58.200.131.2:1935/livetv/dyjctv"},{"name":"CCTV-国防军事","path":"rtmp://58.200.131.2:1935/livetv/gfjstv"},{"name":"CCTV-怀旧剧场","path":"rtmp://58.200.131.2:1935/livetv/hjjctv"},{"name":"CCTV-风云剧场","path":"rtmp://58.200.131.2:1935/livetv/fyjctv"},{"name":"CCTV-风云足球","path":"rtmp://58.200.131.2:1935/livetv/fyzqtv"},{"name":"CCTV-风云音乐","path":"rtmp://58.200.131.2:1935/livetv/fyyytv"},{"name":"CCTV-世界地理","path":"rtmp://58.200.131.2:1935/livetv/sjdltv"},{"name":"CGTN-新闻","path":"rtmp://58.200.131.2:1935/livetv/cctv16"}]}},onLoad() {//将地址保存为全局变量,以便视频播放界面使用getApp().globalData.final_tv_rtmp = this.tv_rtmp},components: {//声明自定义组件prompt,},methods: {to_tv(index){//按钮的点击事件uni.navigateTo({//在当前页面基础上打开页面url: '/pages/TV/TV?id=' + index});},play_other(){this.prompt()},//自定义弹出输入框方法prompt: function() { //显示弹出框uni.pageScrollTo({ //返回顶部scrollTop: 0,duration: 0 //动画时长})this.$refs.prompt.show();},onConfirm: function(e) { //点击了弹出框的确定按钮let _cost = e;if (_cost == '') { //空console.log('你还未输入');return;} else { //输入了this.$refs.prompt.hide();uni.navigateTo({url: '/pages/TV/TV?id=' + _cost});}},onCancel: function() { //点击了弹出框的取消按钮this.$refs.prompt.hide();this.$refs.prompt.cost = '';},}}
</script><style>
.listview{margin-top: 30rpx;/*给每行按钮增加间距*/
}
.other{margin-top: 60rpx;
}
</style>

视频播放页如下

<template><view><!-- 视频播放组件 --><video autoplay="true" :src="src" @error="error" @fullscreenchange="fullscreenchange"></video><!--   开启自动播放    播放路径为src变量  播放出差时调用error函数    fullscreenchange视频全屏时调用fullscreenchange函数  --><!-- 使用for循环输出节目列表 --><view class="list"><view class="listview" v-for="(item,index) in tv_rtmp"><button v-on:click="check_tv(index)"><text>{{index+1}}{{item.name}}</text></button></view></view></view>
</template><script>export default {data() {return {src: "", //视频播放地址tv_rtmp: [],//节目列表index: "" //当前节目所在视频播放页的位置(下标)}},onLoad(option) {this.tv_rtmp = getApp().globalData.final_tv_rtmp//获取节目列表uni.getNetworkType({ //获取网络状态//提示用户断网success: function(res) {if (res.networkType == "none") { //没有网络或者网络不好uni.showToast({title: "网络走丢了呢",duration: 1000,icon: "none"});}}});uni.onNetworkStatusChange(function(res) { //网络发生变更时if (res.isConnected) {//res.isConnected为布尔值,表示当前网络状态uni.showToast({title: "网络回来啦",duration: 1000,icon: "none"});} elseuni.showToast({title: "网络走丢了呢",duration: 1000,icon: "none"});});if (option.id < 1000) {//option.id是用户在首页点击的按钮的下标//小于1000其实是判断option.id是否是数字this.index = option.idthis.src = this.tv_rtmp[this.index].pathuni.setNavigationBarTitle({ //修改标题为当前节目title: this.tv_rtmp[this.index].name})}else{this.index = 0this.src = option.iduni.setNavigationBarTitle({ //修改标题//防止页面崩溃后标题异常//不一定有效title: option.id})}},methods: {error: function() {},fullscreenchange: function(event) {//智能切换屏幕方向if (event.detail.fullScreen) { //全屏plus.screen.lockOrientation("landscape") //自动感应切换屏幕横屏的方向} else { //全屏切换为小屏plus.screen.lockOrientation("portrait-primary") //设置屏幕竖直}},check_tv: function(index) {//切换电视频道this.src = this.tv_rtmp[index].paththis.index = indexuni.setNavigationBarTitle({ //修改标题//防止页面崩溃后标题异常//不一定有效title: this.tv_rtmp[this.index].name})},}}
</script><style>video {width: 750rpx;position: fixed;top: 0;left: 0;}.list {margin-top: 470rpx;}.listview {margin-top: 30rpx;}
</style>

继续优化用户体验:

uni-app默认软件打开时就获取设备识别码,并且强制获取存储权限,为了用户体验还是很有必要优化一下的。

在项目的manifest.json文件->app-plus->distribute->android中,添加如下代码:

"permissionExternalStorage" : {//动态获取存储权限//禁止首次打开软件索要"request" : "none"},"permissionPhoneState" : {//动态获取用户设备信息//禁止首次打开软件索要设备信息"request" : "none"}

并且需要根据项目需求适当优化manifest.json文件->app-plus->distribute->android->permissions里的内容,这个标签写的是软件所需的安卓权限,uni-app默认添加了很多原本不需要的权限,在当前这个视频播放项目中可以直接清空。

三、总结

写到这里,这个简陋的项目就已经完成了,我的第一篇博客就此结束,如果发现文中有任何不妥之处,请指正,感谢收看。

使用uni-app开发一个取流播放器(网络电视)app简陋版相关推荐

  1. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

  2. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

  6. 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...

  7. 国标MPEG-PS实时流播放器开发(附例子)

    公安部制定的GBT 28181标准广泛应用于安防领域,这个标准规定了传输的视音频数据要封装成PS流格式.PS格式(原名叫MPEG-PS)在很多领域已经应用了很长一段时间,特别是在安防.广播电视.影音制 ...

  8. 开发一个类似饿了吗外卖app的价格是多少钱?

    开发一个类似饿了吗外卖app的价格是多少钱?广州app开发公司品向科技(www.dthulian.com)表示随着移动餐饮业的发展,很多传统企业也想追赶互联网的发展,所以很多人都会来咨询广州app开发 ...

  9. 直播平台软件开发中选择点播播放器哪家强?

    直播平台软件开发中选择点播播放器哪家强? 太长不看版 这里选择了开源播放器IjkPlayer和直播云厂商播放器PLDroidPlayer作为测试样本. 数据统计 软硬编码 IjkPlayer PLDr ...

最新文章

  1. undefined reference to `libiconv_open 无法编译PHP libiconv
  2. iOS 后台下载及管理库
  3. 同时使用多网卡提升树莓派网络利用率
  4. Matlab中设置图形窗口的大小、字体、axis等
  5. CPU的主频,总线频率和L2缓存对电脑的性能有哪些影响
  6. formcheck 自定义验证
  7. 易语言PHP查询卡号,易语言卡密管理源码,易语言卡号密码管理软件源码
  8. JMeter下载和安装
  9. 部分IT公司面试流程小结
  10. 程序员王不留到底干了啥?!
  11. python运行脚本文件的3种方法
  12. 证照之星下载证件照制作软件ps及使用教程,附序列号秘钥激活码
  13. 如何将一个服务器加入域控中,Windows Server如何创建域并加入域
  14. 学计算机英语的心得体会,英语学习心得体会
  15. vue报错:Object(...) is not a function
  16. SC8701 120W DC TO DC 电源模块的设计
  17. PAT 1094 谷歌的招聘 (20 分) c语言
  18. Dubbo进阶(二):Dubbo是什么
  19. 为更美好的商业生态,全力以赴
  20. 【机器学习系列】概率图模型第三讲:深入浅出无向图中的条件独立性和因子分解

热门文章

  1. 记录各个七七八八的输入 持续更新中
  2. 陕西云数据库_创业英雄汇:“秦盾云加密数据库系统”沈玉龙
  3. Google Earth Engine ——MOD13A1 /A2V6产品在每个像素的基础上提供植被指数(VI)值(NDVI和EVI)
  4. 2020.09.29重读 原2020.08.04读 MoreFusion
  5. nvd3使用(1)——多线图中的一个很隐蔽的bug
  6. 关于电脑主机名更改,oracle登录不了的问题
  7. 编译单个java文件
  8. 条码查询接口,商品条码和药品条码查询
  9. JZOJ 6287. 2019.08.09【NOIP提高组A】扭动的树
  10. Activity生命周期和启动模式