videos播放rtmp流遇到的一些问题
利用videos播放rtmp流遇到的一些问题
此处使用的是videojs的5.xx版本,尝试利用6.xx或者7.xx是播放不了rtmp流的,6以上的videojs版本默认取消了flash的支持,因此在项目中如果必须使用高版本,可以添加支持flash的js文件videojs-flash。
在项目中因为需要使用高版本来播放HLS,因此与5.xx版本冲突,所以我的解决办法是添加了:
<script src="https://cdn.jsdelivr.net/npm/videojs-flash@2/dist/videojs-flash.min.js"></script
tips:保证videojs和videocss是同一个版本。
a) The media could not be loaded, either because the server or network failed or because the format is not supported.
i. 遇到此问题时首先是在网上搜索报错的原因,看看有没有类似问题的解决办法,结果也是搜到的东西对我来说并没有什么用,因为我是在chrome浏览器报的错误,所以又下了firefox来测试,结果也是报同样的错误,然后用window自带的edge,很开心可以播放了,把连接地址发给朋友他们的chrome竟然可以播放,查看了下chrome的版本,跟我的chrome一模一样,唯一不同的是chrome的位数(所以以后的路就走偏了,把问题放到chrome位数上了),把连接给大佬试了下,也是可以播放的,把我的报错截图全部发给大佬,呵呵,一语惊醒梦中人,是我本地resource的http地址被篡改了,resource的src换成https,完美,能播放了。所以我这是播放源地址有误,找不到可以播放的源,才会报错。
b) "FLASH: rtmpconnectfailure"
i. 此问题是rtmp媒体资源有问题,按照网上搜到的可以播放的rtmp流地址大部分是不能播放的,此处放一个可以播放的源:韩国GoodTV,rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp
c) 利用videojs播放rtmp流用dem调试时 video标签属性preload=”auto”是可以自动播放的,放到弹框里面不能自动播放,设置preload="true",js配置里面var myPlayer = videojs('my-video',{autoplay: true});可以播放
d) 切换播放源
videojs("my-video").ready(function() { var myPlayer = this;//要生成新的player对象 myPlayer.src(url);// 切换播放源为url myPlayer.play(); });
e) 因为要点击不同的按钮显示不同的视频流,所以在每次关闭前一个视频的时候我的做法是myPlayer.dispose(),销毁,以防止占用资源,但是发现销毁之后再次获取video的时候会报错,其实销毁的时候video也会不存在了,所以在隐藏掉弹框时,myPlayer.pause()即可。不会影响点击其他按钮时视频的播放。(此处我做了一个处理是:因为只有一个弹框,每次点击都会有不同的源进行播放,在每次生成myPlayer的时候,放到一个数组里面,当弹框隐藏/消失的时候,把当前的myPlayer删除。个人觉得会有更好的办法来处理myPlayer,切换视频源不失为一个好的办法,待测试)。
f) 控制台报错No compatible source was found for this media.,是因为浏览器默认是禁止flash自动播放的,这时候需要开启允许flash,在chrome下询问也是不行的,必须保证flash是可用的,这里添加了一个判断flash是否禁用的代码,可以在页面上加上,开启flash
<a href="https://get.adobe.com/cn/flashplayer/"; class="flashLoadMsg" target="_blank">安装或者启用FLASH播放器</a>
g) 项目中使用videojs播放HLS时发现,当.m3u8文件不存在或者由于转流时的时间间隔会导致.m3u8文件短暂性报文件不存在的错误,后续即使有文件输出由于已经报错所以video也不会播放文件。通过搜索文章,得知videojs存在error事件,此事件绑定在生成的player对象中,因此在遇到error时可以在onPlayerReady方法中给player对象绑定error事件,进行错误处理
this.on('error',function(e){ var _this = this; errLoad = setInterval(function() { clearInterval(errLoad); _this.src(url); _this.play(); },3000); })//serInterval防止在下一次播放时还会出现报错现象
后续遇到问题,继续积累
最新评论
- 相关文章
踏得网精选2016年度10大最佳HTML5动画
踏得网精选2016年度最酷最新的HTML5动画集,评选标准为:创意新颖度+实现技术难度+趣味程度。使用一些在线H5生成工具的作品,因其主要使用图片和CSS3套路动画,...
常见面试题JS语言中四种函数调用方式实例讲解
JS的语言世界中函数(function)是一等公民,函数的调用有多种方法。普通调用这个是最常见和直接的方式:function
如何使用CSS3合成模式(blend-mode)和滤镜(filter)实现彩色蜡笔(时光机)照片特效
在之前的文章中我们已经详细讲解过CSS3滤镜(filter,也可称之为过滤器)的工作方式,本文将实现一个当下流行的时光机相片特效实例来说明其实际用途。
我们...计算WebGL中的uniforms变量使用数
在使用Three.js为人体模型加载皮肤材料时,启用了skinning:true的参数。有时候会导致GL编译错误,提示“too many uniforms”。下面的文章有助于理解错误原因和检...
三维向量的简单运算和实用意义
在WebGL的实际应用中我们广泛使用向量的几何运算来计算角度、距离,判断点线、点面之间的关系,比如物体之间的碰撞检测。本文简要介绍三维计算机图形学中常用的...
纹理基础知识和过滤模式详解
1、 为什么在纹理采样时需要texture filter(纹理过滤)。
我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixe...WebGL 纹理映射模式以及WRAP_S | WRAP_T参数详解
我们在纹理滤镜一文中已经说明了2个重要的纹理参数,用来定义对象缩放时纹理的处理方式:GL_TEXTURE_MIN_FILTERGL_TEXTURE_MAG_FILTER本文讲解其余几个纹理参数...
Blender2.7 快捷键一览表
通用操作
停止当前操作:ESC
快捷搜索:SPACE撤销:ctrl+z重做:ctrl+shift+z渲染:F12
单选:鼠标右键(RMB)全选:A
框选:B
刷选:...Three.js入门教程6 - 创建全景图和纹理
全景图非常酷。使用Three.js做一个属于自己的全景图并不是那么困难。要做一个全景图,你需要一个软件用来做一张全景图片。我使用了iPhone上的Microsoft Photosyn...
Three.js入门教程4 - 创建粒子系统动画
嗨,又见面了。这么说我们已经开始学习Three.js了,如果你还没有看过之前三篇教程,建议你先读完。如果你已经读完前面的教程了,你可能会想做一些关于粒子的东西。让我们直面这个话题吧,每个人都爱粒子效果。不管你是否知道,你可以很轻易地创建它们。
使用top/left/margin和CSS3 translate两种方法实现标题居中的性能差异详解
要实现标题全屏居中(同时在垂直和水平方向居中),有若干种方法,包括使用弹性布局、表格单元、绝对定位、自动外边距和CSS3平移变换等。你可能已经使用了这些方...
jQuery Ribbles - 基于WebGL的水面涟漪动效插件
使用jQuery
Three.js 开发基础知识 - 绘制3D对象
Three.js是一个用来简化WebGL开发的JavaScript库,比如绘制一个三维立方体,使用WebGL需要100多行,那Three.js只要10几行就能够完成。本文通过创建一个立方体来...
Three.js 3D打印数据模型文件(.STL)加载
3D打印是当下和未来10年产品技术主流方向之一,影响深远。对于电子商务类的3D打印网站,一个主要功能是把商品以3D的方式呈现出来,也就是3D数据可视化技术。HTML...
更多...