整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

SRS RTMP/HLS低延时模式

前主流的流媒体服务器主要有 nginx-rtmp、crtmpd、wowza、red5、adobe fms等。

支持的网络协议对比

协议是服务器的基础,协议决定了关键应用场景,譬如毫秒级别延时只能用udp,秒级别延迟用RTMP,十秒级别可以用HLS。

Feature

SRS

NGINX

CRTMPD

AMS

WOWZA

RTMP

Stable

Stable

Stable

Stable

Stable

HLS

Stable

Stable

X

Stable

Stable

HTTP FLV

Stable

X

X

X

X

HLS(aonly)

Stable

X

X

Stable

Stable

HDS

Experiment

X

X

Stable

Stable

MPEG-DASH

Experiment

X

X

X

X

HTTP Server

Stable

Stable

X

X

Stable

1、RTMP延时特点

延迟较低:

比起YY的那种UDP私有协议,RTMP算延迟大的(延迟在1-3秒),比起HTTP流的延时(一般在10秒以上)RTMP算低延时。

一般的直播应用,只要不是电话类对话的那种要求,RTMP延迟是可以接受的。在一般的视频会议(参考SRS的视频会议延时)应用中,RTMP延时也能接受,原因是别人在说话的时候我们一般在听,实际上1秒延时没有关系,我们也要思考(话说有些人的CPU处理速度还没有这么快)。

有累积延迟:

技术一定要知道弱点,RTMP有个弱点就是累积误差,原因是RTMP基于TCP不会丢包。所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;待网络状况好了,就一起发给客户端。这个的对策就是,当客户端的缓冲区很大,就断开重连。当然SRS也提供配置。

2、延时影响因素

  • GOP
  • SRS可以关闭GOP的cache来避免这个影响
  • 服务器性能太低
  • 服务器来不及发送数据
  • 播放端
  • 譬如flash客户端的NetStream.bufferTime设置为10秒,那么延迟至少10秒以上
  • 推流端
  • GOP、Profile、Tune等编码参数

SRS集群(边缘)不会增加延迟

C++音视频学习资料免费获取方法:关注音视频开发T哥,点击「链接」即可免费获取2023年最新C++音视频开发进阶独家免费学习大礼包!


3、编写配置文件

配置SRS为低延时模式,可以将RTMP延迟降低到0.8-3秒:

# conf/realtime.conf
listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
    tcp_nodelay     on;
    min_latency     on;

    play {
        gop_cache       off;
        queue_length    10;
        mw_latency      100;
    }

    publish {
        mr off;
    }
}

低延时模式影响性能,更多参考如下:

github.com/ossrs/srs/w…

可以将HLS延迟降低到3-5秒:

listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
    hls {
        enabled            on;
        hls_path           ./objs/nginx/html;
        hls_fragment       0.2;
        hls_window         2;
        hls_wait_keyframe  off;
    }
}

HLS还可考虑使用FLV协议替换

4、编码参数设置

GOP = 1;Profile = baseline; Tune = zerolatency (主要是GOP编码参数),例如OBS的编码设置如下:

测试结果,RTMP为1秒、m3u8为3秒:

作者:郎涯技术 链接:https://juejin.cn/post/6996664571117174798

#音视频开发#

LS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

HLS (HTTP Live Streaming)

常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5 是直接支持这个。

但是HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。如果要实现数天的时移,索引量将会是个巨额数字,并明显影响请求速度。因此,HLS协议对存储I/O要求相当苛刻。对此,也有公司提出了非常好的解决方案。

新型点播服务器系统,独创了内存缓存数据实时切片技术,颠覆了这种传统实现方法,从根本上解决了大量切片的碎片问题,使得单台服务器的切片与打包能力不再是瓶颈。其基本原理如下:

不将TS切片文件存到磁盘,而是存在内存当中,这种技术使得服务器的磁盘上面不再会有“数以吨计”的文件碎片,极大减少了磁盘的I/O次数,延长了服务器磁盘的使用寿命,极大提高了服务器运行的稳定性。同时,由于使用这种技术,使得终端请求数据时直接从服务器的内存中获取,极大提高了对终端数据请求的反应速度,优化了视频观看体验。


使用下面两个工具

1、ffmpeg(下载地址:http://ffmpeg.org/download.html)

ffmpeg用来负责把直播流(RTSP)切片成*.ts文件

主要参数:

-i 设定输入流

-f 设定输出格式

-ss 开始时间

视频参数:

-b 设定视频流量,默认为200Kbit/s

-r 设定帧速率,默认为25

-s 设定画面的宽与高

-aspect 设定画面的比例

-vn 不处理视频

-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

-keyint_min 60 最小关键帧间隔

-g 60 GOP 长度

-sc_threshold 0 根据视频的运动场景,自动为你添加额外的I 帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度,

这是只要将它设为0

音频参数:

-ar 设定采样率

-ac 设定声音的Channel 数

-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器

-an 不处理音频

----------------------------------------------------分隔线----------------------------------------------------

主要参数

-i 设定输入档名。

-f 设定输出格式。

-y 若输出档案已存在时则覆盖档案。

-fs 超过指定的档案大小时则结束转换。

-ss 从指定时间开始转换。

-title 设定标题。

-timestamp 设定时间戳。

-vsync 增减Frame 使影音同步。

影像参数

-b 设定影像流量,默认为200Kbit/秒。( 单位请参照下方注意事项)

-r 设定FrameRate 值,默认为25。

-s 设定画面的宽与高。

-aspect 设定画面的比例。

-vn 不处理影像,于仅针对声音做处理时使用。

-vcodec 设定影像影像编解码器,未设定时则使用与输入档案相同之编解码器。

声音参数

-ab 设定每Channel(最近的SVN 版为所有Channel 的总合)的流量。( 单位请参照下方注意事项)

-ar 设定采样率。

-ac 设定声音的Channel 数。

-acodec 设定声音编解码器,未设定时与影像相同,使用与输入档案相同之编解码器。

-an 不处理声音,于仅针对影像做处理时使用。

-vol 设定音量大小,256 为标准音量。(要设定成两倍音量时则输入512,依此类推。)

注意事项

以-b 及ab 参数设定流量时,根据使用的ffmpeg 版本,须注意单位会有kbits/sec 与bits/sec 的不同。(可用ffmpeg -h 显

示说明来确认单位。)

例如,单位为bits/sec 的情况时,欲指定流量64kbps 时需输入‘ -ab 64k ’;单位为kbits/sec 的情况时则需输入‘ -ab 64 ’。

以-acodec 及-vcodec 所指定的编解码器名称,会根据使用的ffmpeg 版本而有所不同。例如使用AAC 编解码器时,会有输入aac

与libfaac 的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats 确认输入的

编解码器是否能运作。

2、WEB服务器(IIS,Apache,Nginx)分发切片

web服务器配置在这里就不多说了。


demo:http://live.16it.wang


如有需要源码的可以联系我:519468341

LS,HTTP,RTSP,RTMP协议的区别:

  • 用HTTP方式: 先通过服务器将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播放这个FLV,这种方法是播放本地的视频,并不是播放服务器的视频。因此在本地缓存里可以找到这个FLV。其优点就是服务器下载完这个FLV,服务器就没有消耗了,节省服务器消耗。其缺点就是FLV会缓存在客户端,对FLV的保密性不好。

是一种将直播流模拟成FLV文件,通过HTTP协议进行下载的模式来实现流媒体传输的协议,端口号80
一般建议使用HTTP FLV,实时性和RTMP相等。
优点:HTTP相比于RTMP省去了一些协议交互时间,首屏时间更短。HTTP可拓展的功能更多。


  • 用RTMP方式: 通过NetConnection连接到FMS(Flash Media Server)或Red5服务器,并实时播放服务器的FLV文件,这种方式可以任意选择视频播放点,并不象HTTP方式需要缓存完整个FLV文件到本地才可以任意选择播放点,其优点就是在本地缓存里是找不到这个FLV文件的。其优点就是FLV不会缓存在客户端,FLV的保密性好,其缺点就是消耗服务器资源,连接始终是实时的。
  • 由以上分析可知,Http方式是本地播放,而RTMP方式是服务器实时播放.

Adobe公司的流媒体传输协议,端口号1935
普通网络用户均可使用,包括非IOS平台用户,对非80端口(如1935)无限制的网络环境用户。
优点:防HTTP下载,延时短。


  • RTSP: RTSP 1.0标准的制订者没有充分预测到互联网带宽的快速增长,以及由于IPv4地址短缺导致的NAT技术的广泛使用,还有代理服务器的大量存在,它在传输可靠性和易用性上都存在一定的缺陷。虽然各家厂商都做了一定程度的修补,比如支持RTSP over HTTP,支持NAT穿透等,但仍然于事无补。在2005之后网络视频大爆炸的几年中,RTSP 1.0并没有得到youtube, hulu, 土豆,优酷等视频服务提供商的青睐,相反,Adobe公司开发的私有流媒体技术RTMP以其优秀的易用性和富媒体的一体化集成,得到了多数视频服务提供商的追捧,成为了事实上的标准.

缺点:web端播放rtsp流的话,需要写插件,而且对浏览器也很挑剔,flash不支持rtsp,需要做activeX插件

目前的CDN都是基于RTMP的


  • HLS(Http Living Streaming): 从2010年起,苹果开始在iOS设备上支持一种叫做”Live HTTP”的流媒体技术,并宣布在iOS上不会支持RTSP和Flash技术。Live HTTP本质上跟基于HTTP的文件分段下载很接近。在带宽充裕的前提下,live HTTP能够实现跟RTSP和RTMP同样的流媒体播放效果,同时得到了更好的易用性,更简单的控制。
    在最新一代的超文本标识语言HTML5中,视频文件的点播,同样也采用了HTTP作为其承载协议。

HLS
IOS平台下的流媒体传输协议 ,端口号80
优点:H5浏览器支持比较好,IOS,安卓原生支持。
缺点:延迟性比较大。楼上说的切片,关键帧改变后切片时间可以缩短,而且可以自己设定首次产生多少分片。


音视频开发教学视频:【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频教程-腾讯课堂