当前位置: 首页 > article >正文

H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连

EasyPlayer.js无插件H5播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。

EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式,也能支持WebSocket-FLV、HTTP-FLV、HLS(m3u8)、WebRTC、ws-fmp4、http-fmp4等格式的视频流,并具备直播、点播、录像、快照截图、MP4播放、多屏播放、倍数播放、全屏播放等功能特性。

1006是websocket的一个异常码,表示连接异常断开。

1006:CLOSE_ABNORMAL,用于期望收到状态码时连接非正常关闭。

WebSocket关闭状态码1006是由于服务器在接收到客户端的连接请求后,在建立连接前发生了错误导致连接失败。

可能的原因

1、在客户端和WebSocket服务器之间的全双工连接中,有时候连接上可能没有数据流。在这个时候,网络中介可能中止连接。

就是可能会在一段时间内没有数据流,导致网络中介认为连接已经断开了。

2、也有可能是播放器端进程卡住了,导致接受推流的速度变慢,导致流媒体推流端推流到播放器变慢,甚至直接没法接收到流媒体传输过来的数据,导致网络中介认为没有流数据了,为连接已经断开了,也有可能是服务器端检测到堆积量过大,从而断开了ws连接,从而导致浏览器抛出了1006错误。

3、有可能是本地的网络带宽上限要低于流媒体服务器端推流的码率,比如流媒体服务器端推流的码率是2M,而本地的网络带宽只有1M,这样就会有1M的数据堆积没法到达播放器端,导致服务器端堆积过多就会断开连接,然后播放器抛出了1006错误。

通讯层(浏览器底层)断连了,但是应用层还是连接着,这个时候浏览器就会抛出1006错误。

4、大多情况都是因为websocket连接在nginx配置的proxy_read_timeout内没有收到数据,nginx主动发起的连接断开(不是客户端主动断开,也不是服务端主动断开的)

client->proxy->ws-server如果proxy和ws-server之间通信有问题client就会收到1006错误码。

5、网络连接问题:网络中断、防火墙设置等因素可能导致WebSocket连接异常关闭。

在播放倍率流的时候,如果服务器端是高倍率推流,比如8倍,这个时候如果电脑的性能跟不上,就会导致解封装和解码跟不上,因为js是单线程的,会导致解码和解封装的速度跟不上,导致堆积量过大,从而堵塞了接收流数据,从而触发了服务器端数据堆积过大,从而从物理层断开ws连接,从而导致浏览器抛出了1006错误。

这种情况下可以考虑检查服务器端的程序和硬件是否正常工作,查看服务器端的日志和监控数据来找出问题所在。

解决方案

需要在nginx加入一段proxy的timeout超时设置,加了500s。

播放器支持内部检测到1006错误,会内部自动重连。

EasyPlayer.js播放器项目系列已经具备Windows、Android、iOS三个平台的稳定运行版本,EasyPlayer.js无插件H5播放器还支持Linux平台,在播放器领域是多平台的最佳选择,并且EasyPlayer.js播放器系列项目底层采用了高性能的EasyRTSPClient组件,其低延时控制在行业处于领先位置。


http://www.kler.cn/a/404877.html

相关文章:

  • kafka中是如何快速定位到一个offset的
  • 【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
  • 结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据
  • MyBatis的resultType和resultMap区别
  • Python虚拟环境入门:虚拟环境如何工作、如何自定义创建和管理管理工具venv、Virtualenv、conda
  • Matlab实现海鸥优化算法优化随机森林算法模型 (SOA-RF)(附源码)
  • 视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题
  • Hello-Go
  • 腾讯云单元化架构体系介绍
  • 深入探索Solana链上的Meme生态:创新、潜力与挑战#区块链开发#dapp开发
  • xml和xpath
  • C# BitmapSource小节
  • TensorFlow如何调用GPU?
  • 【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理
  • 学习路之phpstudy--安装mysql5.7后在my.ini文件中无法修改sql_mode
  • 嵌入式实验报告:家用计时器
  • MFC工控项目实例三十一模拟量转化为工程量
  • Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
  • 从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望
  • 【MQTT.fx 客户端接入 阿里云平台信息配置】
  • 湘潭大学软件工程算法设计与分析考试复习笔记(二)
  • 【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
  • 【Unity】网格系统:物体使用网格坐标定位
  • ceph 18.2.4二次开发,docker镜像制作
  • 【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境
  • C++20 协程入门