EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器同步输出http-flv协议流是怎么实现的?
http-flv是什么
http-flv是以http为传输协议,flv媒体格式为内容的方式实时下载flv音视频帧。为什么选择flv格式而非mp4?原因是mp4必须要有moov box或者moof box才能播放,而moov box和moof box 中主要存储的是帧的索引,在实时直播过程中所有未产生的帧都是无法预测的,所以moov和moof都不能提前生成,也就很难做到实时的效果。当然moof box有点特殊,可以重复出现,这样就能每隔几帧就生产一个moof box下发给客户端,也是可以做到直播效果的,这种方式被人们广泛称为http-fmp4,DASH协议就是是利用moof实现的。
flv文件不同之处在于,播放器只要获取到其中的metadata、avc-header、aac-header后就可以顺序播放接下来的所有帧。所以服务器只需要在客户端连接的时候顺序发送metadata、avc-header\aac-header后连续不断地发送音视频帧播放器就会不停接收并且播放flv内容了。
sequenceDiagram
播放器->>服务器: http://ip/app/stream.flv
服务器->>播放器: 返回flv-header
服务器->>播放器: 返回metadata
服务器->>播放器: 返回avc-header
服务器->>播放器: 返回aac-header
服务器->>播放器: 返回video-frame
服务器->>播放器: 返回audio-frame
服务器->>播放器: ...
服务器->>播放器: ...
服务器->>播放器: ...
具体涉及到的flv-header、metadata、avc-header\aac-header是什么这里不做讨论,感兴趣的朋友可以搜索一下“video_file_format_spec_v10”
http是如何下发flv数据的
上面说到的下发过程是基于http下载进行的,但是一般http下载的时候都会在http头中添加content-length参数,该参数是为了告诉客户端需要接收多少字节的数据。但是作为直播,我们是无法预知要传输多长数据的,所以content-length参数一定不能出现,只要没有这个参数,客户端就会一直接收服务器发送的数据直到tcp连接断开。
既然没有了content-length,是不是就意味着直接下发原始flv流就行了呢?答案是否定的,因为在没有content-length的情况下大部分客户端都希望服务器支持chunked编码,把需要发送的数据打包成一段一段的数据。具体chunked编码是怎么回事网上有很多文章做详细介绍,这里就不再累述。以上所提到的所有内容都在easydss服务器上做了完整的支持。

EasyDSS流媒体服务器
EasyDSS流媒体服务器具有高效的视频管理功能,支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。该系统完全由C语言研发实现,能够最大限度的挖掘硬件和网络的潜能,实现在一台普通服务器上支持超过5000个并发播出。系统支持HTTP、HLS、RTMP等播出协议,面向Windows、Android、iOS 、Mac等终端提供稳定流畅的直播、点播、时移、回看服务,广泛应用到互联网教学、互联网电视、IPTV、VOD、视频聊天和各种互联网直播/点播。详细EasyDSS文档及资料获取:http://www.easydss.com


EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器同步输出http-flv协议流是怎么实现的?的更多相关文章
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的视频直播录像、检索、回放方案
需求背景: 近期遇到客户反馈对于直播摄像机录像功能是有一定的需求点的,其实EasyDarwin团队早就研发出对应功能,只是用户对于产品没有足够了解,因此本篇将对录像功能来做一次介绍. 首先,录像就是对 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器与EasyDSS流媒体解决方案的不同
背景分析 众所周知,立足于视频软件的开发,我们的产品很多.经常有客户问到我们产品的差别以及某个产品在某个系统架构中的具体定位,因此我想通过一系列的博客说明一下,不同产品之间的区别,以及在具体架构中自身 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之Nodejs调用bat或sh脚本
关于EasyDSS流媒体服务器 EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器web前端:vue组件之间的传值,父组件向子组件传值
前端方面,EasyDSS流媒体服务器与EasyNVR有着根本的不同.EasyNVR使用的是传统的js来进行开发,而EasyDSS使用的是webpack+vue来进行开发的,了解vue+webpack的 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(六)- webpack-dev-server 自适应支持手机端访问
关于EasyDSS EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP流媒体服务器 ...
- Nginx搭建flv mp4流媒体服务器[转]
Nginx搭建flv mp4流媒体服务器 作者:二蛋 时间:December 1, 2014 分类:Note 环境:Centos 6.4 32bit 一.安装依赖包 1.安装zlib wget htt ...
- (转)CentOS6.5安装Darwin Streaming Server搭建RTSP流媒体服务器
参考: 1,CentOS6.5安装Darwin Streaming Server搭建RTSP流媒体服务器 http://www.yimiju.com/articles/567.html
- EasyDSS高性能RTMP、HLS(m3u8)、FLV、RTSP流媒体服务器运行遇到getpwnam(_xxxxx_)错误的解决办法
EasyDSS RTMP流媒体服务器是什么? EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS! getpwnam("xxxxx") 近期有EasyDSS流媒 ...
- EasyDSS高性能RTMP/FLV/HLS(m3u8)/RTSP流媒体服务器技术的HTTP QueryString URL的C++实现方案
EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如 http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...
随机推荐
- D. Nested Segments(树状数组、离散化)
题目链接 参考博客 题意: 给n个线段,对于每个线段问它覆盖了多少个线段. 思路: 由于线段端点是在2e9范围内,所以要先离散化到2e5内(左右端点都离散化了,而且实际上离散化的范围是4e5),然后对 ...
- c语言的可变参数实例
可变参数函数实现的步骤如下: 1.在函数中创建一个va_list类型变量 2.使用va_start对其进行初始化 3.使用va_arg访问参数值 4.使用va_end完成清理工作 接下来我们来实现一个 ...
- 【比赛题解】CSP2019 简要题解
D1T1 code 签到题,大家都会. 可以从高位往低位确定,如果遇到 \(1\),则将排名取反一下. 注意要开 unsigned long long. #include <bits/stdc+ ...
- nginx 配置文件正确性测试
今日思语:每天都要不一样,那么每天就应该多学习 在安装完nginx之后,我们可以使用nginx的测试命令来验证下nginx.conf的配置是否正确: 方式一:不指定文件 nginx -t 如上可知/e ...
- 编程用泰勒公式求e的近似值,直到最后一项小于10的负6次方为止。
#include<stdio.h>#include<math.h>void main(){ int n; float j=1.0,sum=1.0; for(n=1;;n++) ...
- WinDbg常用命令系列---显示加载的模块列表lm
lm (List Loaded Modules) lm命令显示指定的加载模块.输出包括模块的状态和路径. lmOptions [a Address] [m Pattern | M Pattern] 参 ...
- check_monitor
#! /bin/bash # 声明agent配置文件路径 CONF=/etc/sdata/zabbix/zabbix_agentd.conf #CONF=/tmp/zabbix_agentd.conf ...
- CSS块元素、行内元素、行内块元素的转换
一.块元素转行内元素:display:inline 二.行内元素转块元素:display:block div{ display: inline; /*无效 width: 500px; height: ...
- 原生 ajax 请求
ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用.本质是在 HTTP 协议的基础上以异步的方式与服务器进行通信. 异 ...
- Android入门教程(三)
对Android五大布局的描述,分别是 FrameLayout (框架布局),LinearLayout (线性布局),AbsoluteLayout (绝对布局),RelativeLayout (相对布 ...