首页 > 其他分享 >websocket-fmp4播放器wsPlayer

websocket-fmp4播放器wsPlayer

时间:2024-04-11 13:44:51浏览次数:19  
标签:播放器 HTTP WebSocket flv wsPlayer video fmp4 websocket


https://blog.csdn.net/tech2ipo/article/details/124369020

 

https://github.com/ZLMediaKit/ZLMediaKit

https://github.com/chatop2020/AKStream

 

一、web视频播放器的现状与问题
1、流媒体协议选型:
主流流媒体协议归纳总结:

协议名称 网络传输协议 延时 编码类型 HTML5支持情况
RTSP TCP/UDP/组播 0~3s H264/H265 不支持,(RTSP over HTTP除外)
RTMP TCP 0~3s H264/H265(CodecID =12) 不支持
HLS HTTP短连接 1~10s H264/H265 video标签支持
HTTP-FLV HTTP长连接 0~3s H264/H265(CodecID =12) flv → fmp4 → video标签
HTTP-fmp4 HTTP长连接 0~3s H264/H265 video标签原生支持
WebSocket-FLV WebSocket 0~3s H264/H265(CodecID =12) flv → fmp4 → video标签
WebSocket-fmp4 WebSocket 0~3s H264/H265 使用MSE,vidoe标签播放
在直播场景,目前主流的方案是http-flv,这个协议的优劣分析:

优点:

生态比较完善:

大多数后端流媒体服务器都支持rtmp/http-flv协议,比如srs,zlmediakit。

大多数web播放器也支持http-flv协议,比如flv.js,DPlayer,ckplayer。

很多CDN都支持http-flv分发。

视频实时性比较好,可以做到0~3s;

缺点:

flv不支持H.265;

flv数据解析过程比较复杂,web播放器需要将flv转为fmp4数据,然后用MediaSource播放;

HLS协议也是一个选择,HLS支持H.265,但是hls播放延迟较大;

由于chrome浏览器对同源http长连接的并发数限制为6个,所以http-flv最多只能播放6个画面,此时可以考虑使用websocket代替http,即
websocket-flv协议;

2、解码和渲染方案的选型:
H.264:浏览器的video标签支持H.264编码格式,所以解码和渲染由浏览器内部完成;

H.265:主流方案是webassembly+webGL;

二、适用直播场景的新方案:wsPlayer
github地址:https://github.com/v354412101/wsPlayer

​ wsPlayer是一款专注于WebSocket-fmp4协议的web视频播放器,HTTP/WebSocket-fmp4协议与RTMP、HLS、HTTP-FLV相比,具有播放延时短,HTML5兼容性好等优点;

WebSocket-fmp4协议支持H.264/H.265,视频实时性比较好,协议解复用简单,并发路数没有限制。

1、播放器原理
​ 将WebSocket收到的fmp4 Segment片段appendBuffer到MediaSource中,此时video.buffered会记录当前已经appendBuffer的视频时间段,然后将video.buffered的起始时间设置给video.currentTime,然后浏览器就会从video.buffered缓存的视频开始播放

2、最佳实践
推荐使用ZLMediaKit作为WebSocket-fmp4协议的后端流媒体服务器

1)部署后端流媒体服务器

docker pull panjjo/zlmediakit
docker run -id -p 8080:80 -p 554:554 panjjo/zlmediakit
1
2
2)使用ffmpeg命令,向ZLMediaKit添加一路RTSP推流

ffmpeg -re -stream_loop -1 -i test.mp4 -an -vcodec copy -f rtsp -rtsp_transport tcp rtsp://192.168.1.3/live/test
1
3)根据ZLMediaKit的播放url规则得知,WebSocket-fmp4协议的URL格式为:

ws://192.168.1.3:8080/live/test.live.mp4
1
4)然后调用播放器代码:

<html><head></head>
<body>
<script type="text/javascript" src="mp4box.all.min.js"></script>
<script type="text/javascript" src="wsPlayer.js"></script>
<video muted autoplay id="video"></video>
<script>
document.addEventListener('DOMContentLoaded', function () {
var player = new wsPlayer("video", "ws://192.168.1.3:8080/live/test.live.mp4");
player.open();
});
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
依赖库:https://github.com/gpac/mp4box.js

3、项目计划
v1.0 实现用video标签,调用MSE播放WebSocket-fmp4(H.264)直播流,并把播放器封装为标准的npm组件;

v2.0 实现用WebAssembly FFmpeg解码H.265,然后用canvas标签WebGL渲染YUV,从而实现播放WebSocket-fmp4(H.265)直播流,并实现动态切换H.264、H.265这两种播放机制;

v3.0 实现视频流SEI信息的callback回调
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/tech2ipo/article/details/124369020

标签:播放器,HTTP,WebSocket,flv,wsPlayer,video,fmp4,websocket
From: https://www.cnblogs.com/chinasoft/p/18128929

相关文章

  • Springboot 添加 WebSocket 服务
    后端WebSocketServer.java文件:packagecom.ruoyi;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;importjavax.websocket.*;importjavax.websocket.ser......
  • 深入理解 WebSocket:实时双向通信的核心技术(python案例)
    引言WebSocket是一种在Web开发中广泛使用的通信协议,它提供了一种实时、双向的通信机制,允许客户端和服务器之间建立持久连接,实现高效的实时数据传输。本文将深入探讨WebSocket的工作原理、优势、应用场景以及使用示例,帮助读者全面了解WebSocket技术。什么是WebSocket?......
  • 说说对WebSocket的理解?应用场景?
    一、是什么WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输从上图可见,websocket服务器与客户端通过握手连......
  • 苍穹外卖10(Spring Task定时任务,WebSocket双向通信,订单状态定时处理,来电提醒,客户催单)
    目录一、SpringTask1.介绍2.入门1使用步骤2使用示例3.详解1@Scheduled注解2cron表达式1cron表达式6个域2各个域的取值说明4.小结二、订单状态定时处理1.需求分析1问题分析2功能需求2.代码开发1修改引导类加@EnableScheduling2创建OrderTask......
  • WebSocket socket.io.js 前后端交互,优秀的示例
    前言全局说明WebSocketsocket.io.js前后端交互,优秀的示例一、官方示例https://flask-socketio.readthedocs.io/en/latest/getting_started.html二、其他示例https://www.cnblogs.com/yoyoketang/p/18022139三、Python的subprocess执行命令、交互、等待、是否结束、......
  • WebSocket manager.js:115 GET http://IP:8000/socket.io/?EIO=4&transport=polling&t
    前言全局说明WebSocket报错net::ERR_CONNECTION_TIMED_OUT一、问题:WebSocket报错net::ERR_CONNECTION_TIMED_OUT二、原因:可能和后端的服务链接不上导致的三、解决方法:重启启动后端服务免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后......
  • HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebSe
    HIS系统是什么?一套前后端分离云HIS系统源码接口技术RESTfulAPI+WebSocket+WebService医院管理信息系统(全称为HospitalInformationSystem)即HIS系统。常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提......
  • WebSocket socket.io.js文件镜像源
    前言全局说明WebSocketjs文件镜像一、说明js文件名字中带min的,是压缩版(去掉空格、换行等字符),方便传输。如果想查看源码,就选不带min字样的。二、cloudflare.com镜像<scriptsrc="//cdnjs.cloudflare.com/ajax/libs/socket.io/4.2.0/socket.io.js"></script>三......
  • vue websocket电脑端前端集成
    后端数据用websocket推送数据,前端在大屏左上角模块页面接收,用bus发送到其他模块(总共6个模块页面,从左上模块页面发送到其他5个模块页面)页面,数据用于大屏上显示,废话不多说,直接上代码。eventBus.js文件,放到根目录src->assets->js文件夹下,eventBus.js文件内容如下:importVuefr......
  • 十分钟学会WebSocket
    一、WebSocket简介WebSocket是一种在客户端和服务器之间实现双向通信的网络协议。它通过在单个TCP连接上提供全双工通信功能,使得服务器可以主动向客户端推送数据,而不需要客户端发起请求。 二、WebSocket的工作原理1.WebSocket的握手过程和HTTP有所不同。客户端通过发送特定......