http-flv 直播
来源:互联网 发布:淘宝美工在哪里找素材 编辑:程序博客网 时间:2024/06/06 09:34
参考:
http://www.cnblogs.com/luconsole/p/6079534.html
https://segmentfault.com/a/1190000009695424 使用flv.js 直播
1. http-flv到底是怎么直播?
这里我们主要研究httpflv和hls。看了主流几个web直播平台,发现几乎都是以httpflv为主来直播的,那么这么火httpflv到底是怎么达到直播的?
首先我们都知道在媒体格式里,几乎都以h264视频编码。如今httpflv直播的flv数据也都是h264&aac为主的。flv封装单元是以tag来表示的,一个tag可以是音频tag或者视频tag,或者脚本tag及其其他类型。
值得注意的是flv里面字节序是网络字节序,
flv的格式:
1 flvheader+[脚本tag(metadata)]+[第一个视频tag(h264_spspps)]+[第一个音频tag(aac_header)]+[第二个视频tag(h264第一个关键帧)]+ 后面就是音频和视频tag交互存在
tag的格式:
1 TYPE[1byte] + body size[3byte] + timestamp [4byte] +streamID [3byte] +[body data]+[previousTagSize 4byte]
这里的timestamp是这样存在的[ time tamp 3b,time tamp ex 1b]
h264视频tagbody:
这里存储的h264是没有nal分割符的,在t的body里面是这样存储的,
1 [isKeyFrame(1byte)]+0x01+[compositionTime 3byte]+[h264 size 4byte]
compositionTime是h264编码结果dts和pts之间的偏移。
aac视频tag的body:
1 0xaf+0x01+aac raw
以上就是flv格式的详细说明,可以看出格式简单,封装的前后数据关联很小,当我们得到音频头和视频头,就可以从后面任意的一个关键帧开始播放。
当然想要httpflv正常播放,不能缺少matedata,就是第一个脚本tag里面,这里面指定了分辨率,音视频编码格式等。
httpflv直播实际上单纯就是往客户端发送flvtag,当然是先发送flv前面那几个关键的tag,然后第一帧是关键帧。
假如客户端是obs推流软件,以rtmp方式向服务器推流,在开始握手及其创建stream完成以及发送Metadata完成,及其一系列数据发送完毕,服务器就向obs发送publish result指令,此后,obs就开始向服务器推送flv tag数据,开始直播,而服务器也得到了flv数据。
当某个客户端想要来获取直播数据,比如httpflv的方式来观看直播,服务器会怎么做呢?
服务器会先发送前面几个flvtag,header+metadata+spspps+aacheader,当这几个tag发送完毕,服务器会从直播流tag中,找到最新的视频关键帧tag,从这个关键帧tag开发数据,为什么呢?因为视频流是IBP帧相互存在的,I是完整数据,BP解码都需要I帧和前面的帧,所以,正常视频数据,必须是从I帧开始发送的。这里就涉及到gop间距了,rtmp低延时秒开就是这个原理。当然发送的时候,每个连接的tag开始时间戳戳要从0开始递增的。
至此,httpflv客户端就可以接受到flv流数据,解码观看直播了。
https://github.com/Bilibili/flv.js
利用flv.js 可以实现html5的直播。
- http-flv 直播
- 直播http-flv小调研
- 直播http-flv小调研
- 直播协议 HTTP-FLV 详解
- 直播协议HTTP-FLV标准解读与技术实现
- 直播协议HTTP-FLV标准解读与技术实现
- 基于nginx-rtmp-module模块实现的基于HTTP协议的FLV直播模块(nginx-http-flv-module)
- Flv文件直播工具
- flv 播放直播视频
- SRS支持的各种HTTP直播流(FLV、TS、MP3、AAC)
- ffmpeg flv直播发送的一点感悟
- 如何使用 flv.js 做直播
- HTTP Live Streaming直播
- HTTP & RTMP 直播比较
- HTTP & RTMP 直播比较
- FMS与Vcam实现flv网络电视直播 FMS直播
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- 第四课:jsonp抓取数据
- Linux下Solr的安装和配置
- 第七周项目4
- 测试小白进阶学习网站汇总
- Nginx.conf配置文件中文解释版(1.11.1)
- http-flv 直播
- error: Installed (but unpackaged) file(s) found:
- android 权限控制2
- 麒麟座迷你板STLINK使用
- 截图功能
- Springboot之使用Scheduled做定时任务
- (一)连续傅里叶变换与离散傅里叶变换:傅里叶级数(Fourier Series)
- ios打framework包:Undefined symbols for architecture arm64:
- 通过私有构造器强化不可实例化的能力