WS-FLV直播协议分析

news/2024/12/22 16:34:47/

 一、简介

        ws-flv(websocket-flv)是一种直播协议,其基于WebSocket来传输FLV格式的音视频。可以用来替代rtmp,解决其需要浏览器端依赖flash的问题;替代http-flv,解决浏览器同域名请求的最大并发数限制导致的浏览器只能播放6路http-flv流的问题。

二、通过网页播放器播放ws-flv

        开源流媒体服务器ZLMediaKit支持ws-flv,按照《windows下编译ZLMediaKit》编译运行ZLMediaKit,ZLMediaKit所在电脑的ip为172.16.17.154。

推流端执行命令:

./ffmpeg -re -i video.mp4 -vcodec copy -acodec aac -f flv rtmp://172.16.17.154/live/test1

转出来的rtmp流 url为rtmp://172.16.17.154/live/test1,这里ZLMediaKit会把rtmp转协议为ws-flv,根据播放url规则 ,ws-flv直播后缀改成了.live.flv,我 配置的ZLMediaKit的http服务器监听端口为30000,所以ws-flv url为 ws://172.16.17.154:30000/live/test1.live.flv

flv.js支持ws-flv,可以用其官方的例子播放。浏览器所在电脑的ip为192.168.16.13

三、抓包分析ws-flv

对播放的过程进行抓包,可以看到ws-flv本质上也是WebSocket,其复用了HTTP的握手通道,客户端(播放端)通过HTTP请求与WebSocket服务端(ZLMediaKit)协商升级协议。协议升级完成后,后续的数据(音视频数据)交换则遵照WebSocket的协议

直播产生的视频和音频,属于流数据,是一帧一帧的,本质就是二进制数据,通过websocket传输(Opcode的值是%x2:表示这是一个二进制帧)

四、停止播放分析

        当用户主动关闭网页播放器时,播放端(客户端)会向ZLMediaKit(服务器)发送"WebSocket Connection Close",然后播放端会主动发起TCP四次挥手。

如果是因为推流端停止推流导致播放中断了,则流媒体服务器会主动发起TCP四次挥手。

之前项目中我们遇到一个问题,ws-flv长时间播放时,网页会偶发停止播放。为了验证是网页播放器还是流媒体服务器/推流端的问题,我们进行抓包。结果发现是网页发送了"WebSocket Connection Close"导致停止了播放。所以我们可以根据上述依据进行判断。

五、参考

《【视频直播篇一】入门篇》

《历时数月钻研推流/对比各种流媒体服务程序/PK总结》

《用一个 flv.js 播放监控的例子,带你深撅直播流技术》

《HTTP-FLV 和 WebSocket-FLV有什么区别?》

《WebSocket协议:5分钟从入门到精通》

《websocket connection is closing automatically》

《[技术咨询]使用ws协议播放flv连接断线 #854》

《websocket client 主动关闭》

《小程序退到后台能不能继续保持websocket连接?》


http://www.ppmy.cn/news/1136640.html

相关文章

commons-lang3工具常用方法

commons-lang3是一个开源的Java类库&#xff0c;提供了一组实用工具类&#xff0c;主要用于操作字符串、日期、数值、数组等基本类型和对象。它的功能非常全面&#xff0c;几乎可以满足Java程序开发中所有涉及到的常规任务。 引入依赖 <dependency><groupId>org.ap…

使用Pytorch构建神经网络

构建神经网络的典型流程 定义一个拥有可学习参数的神经网络遍历训练数据集处理输入数据使其流经神经网络计算损失值将网络参数的梯度进行反向传播以一定的规则更新网络的权重 我们首先定义一个Pytorch实现的神经网络: # 导入若干工具包 import torch import torch.nn as nn …

MySQL数据库索引练习

1.学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, Scor…

京东工业商品详情数据接口

京东工业品平台提供了商品详情API接口&#xff0c;通过该接口&#xff0c;可以获取商品详情信息&#xff0c;包括商品ID、名称、副标题、价格、库存、图片等相关信息。 获取京东工业品平台商品详情数据接口的具体步骤如下&#xff1a; 注册并登录京东工业品平台的API控制台&a…

文本分词排序

文本分词 在这个代码的基础上 把英语单词作为一类汉语&#xff0c;作为一类然后列出选项 1. 大小排序 2. 小大排序 3. 不排序打印保存代码 import jieba# 输入文本&#xff0c;让我陪你聊天吧~ lines [] print("请输入多行文本&#xff0c;以\"2333.3\"结束&am…

阿里云轻量应用服务器和ECS服务器有什么区别?超详细对比

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

设计加速!11个Adobe XD插件推荐!

你是否一直在寻找可以提升 Adobe XD 工作流程和体验的方法&#xff1f;如果是&#xff0c;一定要试试这些 Adobe XD 插件&#xff01;本文将介绍 11 款好用的 Adobe XD 插件&#xff0c;这些插件可以为 UI/UX 设计添加很酷的新功能&#xff0c;极大提升你的工作效率和产出。让我…