天天看点

PingOS服务器系统常见问题总结1. 如何支持H265编码?2. 如何降低直播延时?3. 如何降低HLS直播延时?4. 如何支持拉取rtsp源?QQ交流群:697773082

转载请注明出处:https://blog.csdn.net/impingo

我的开源项目地址:https://github.com/pingostack/pingos

开源项目:https://pingos.io

目录

  • 1. 如何支持H265编码?
  • 2. 如何降低直播延时?
    • 2.1 优化推流端
    • 2.2 优化PingOS服务器配置
    • 2.3 优化播放器端
  • 3. 如何降低HLS直播延时?
  • 4. 如何支持拉取rtsp源?
  • QQ交流群:697773082

本篇内容记录大家问的比较多的问题,持续更新…

1. 如何支持H265编码?

PingOS支持H265编码直播和H265编码的mpegts、flv文件录制功能。rtmp和flv默认使用12(十六进制 0x0c)代表h265编码。同时推流工具也要配合修改,使用12做为h265的。

你可以通过HLS、HLS+、http-flv、rtmp、http-ts协议播放h265编码的流,其中http-flv和rtmp需要播放器做特殊改进才能支持,一般桌面版播放器都能直接支持H265编码的HLS和HLS+直播流。

你也可以使用其他的codecid来作为H265编码类型的扩展。配置方式如下:

https://pingos.io/docs/zh/config-core#hevc_codecid

PingOS服务器系统常见问题总结1. 如何支持H265编码?2. 如何降低直播延时?3. 如何降低HLS直播延时?4. 如何支持拉取rtsp源?QQ交流群:697773082

以ffmpeg推流工具为例,如果你需要能够推送支持h265编码的rtmp流,你需要下载特殊的ffmpeg版本,ffmpeg源码连接:https://github.com/im-pingo/CDN-Union_H265

ffmpeg编译过程可参考ffmpeg官网文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

ffmpeg编译成功后使用ffmpeg推流:

ffmpeg -i input.mp4 -vcodec h265 -acodec aac -f flv rtmp://ip/app/name
           

2. 如何降低直播延时?

在直播过程中,推流端、服务器端、播放器、网络环境等因素都会影响延时。

对于每个端上的优化措施可以参考以下参数:

2.1 优化推流端

  • h264编码一定不要开启B帧, 解码时B 帧依赖于前后的帧,会增加延迟。
  • h264 编码使用 H.264 baseline profile,减少编码时消耗的时间。
  • 音频尽量使用AAC-LC Codec,这样会减少编码时消耗的时间。
  • 适当调整关键帧间隔(GOP大小),因为前文说过服务器是以GOP个整数倍进行缓存的,如果GOP过大服务器端的缓存也会变大,建议设置为2s(但是同等码率下GOP越小清晰度也会越低,所以建议大家视场景而定,推荐不小于1s)。

以OBS推流工具为例,要想尽量减少延时,可以参考如下配置:

PingOS服务器系统常见问题总结1. 如何支持H265编码?2. 如何降低直播延时?3. 如何降低HLS直播延时?4. 如何支持拉取rtsp源?QQ交流群:697773082

2.2 优化PingOS服务器配置

对于服务器端来说,可优化的点并不多,无非是对缓存大小进行优化。直接以PingOS服务器为例:

配置项 优化项 讲解 配置示例
cache_time 缓存大小 以时间为单位的配置项,缓存大于等于整数倍个gop长度的数据,理论上这个值越小延时会越低。如果你不关心播放端的首屏显示的速度,可以将cache_time设置为0,这样服务器就不会缓存任何数据,实时将内容下发。 cache_time 0s;
low_latency 开关 on/off 低延时选项,cache_time大于0时有效,开启后服务器缓存中如果有新的关键帧,则跳过P帧,从新的关键帧处开始分发 low_latency on
send_all 开关 on/off cache_time大于0时有效,第一次向播放端发送数据时,是否一次性将缓存数据全部下发。如果一次将缓存数据全部下发,则相当于将服务器缓存积累的延时抛给了播放端,这样的话,即使设置了low_latency也没用,因为缓存中已经无数据可跳过。将这个配置设置成false,并且和low_latency配合使用可一定程度上降低延时。 send_all

服务器配置示例:

application live {
    live on;
    cache_time 2s;
    low_latency on;
    send_all off;
}
           

2.3 优化播放器端

播放端的优化因播放器而定,这里以flv.js播放器为例,图中stashInitialSize的值就是播放器缓存大小,可按需调整。

PingOS服务器系统常见问题总结1. 如何支持H265编码?2. 如何降低直播延时?3. 如何降低HLS直播延时?4. 如何支持拉取rtsp源?QQ交流群:697773082

3. 如何降低HLS直播延时?

关于HLS的延时优化,除了在前文

2. 如何降低直播延时?

中提到的操作外,服务器端主要是通过降低切片大小来实现。

这里主要介绍三个配置:

hls_fragment 1300ms;
hls_max_fragment 1800ms;
hls_playlist_length 3900ms;
           
  • hls_fragment

    hls_max_fragment

    配置一起决定了一个ts切片文件的时长,ts文件的时长会小于

    hls_max_fragment

    ,大于等于

    hls_fragment

    。所以适当调整这两个参数能够使ts切片更实时,这里建议hls_max_fragment大于等于2000ms,并且小于2 * hls_fragment。
  • hls_playlist_length

    设置成

    hls_fragment

    的三倍即可。

4. 如何支持拉取rtsp源?

目前PingOS还不支持直接拉取rtsp源,但是可以利用

exec_pull

配置配合ffmpeg工具拉取rtsp源。

exec_pull

配置的作用是允许在第一次有人请求播放某一条直播流的时候PingOS会执行一条

Shell

命令,你可以在这条

Shell

命令里执行ffmpeg拉流转推到PingOS的操作。

例如添加下面的配置:

exec_pull bash -c "ffmepg -i rtsp://$parg_ip/$parg_uri -vcodec copy -acodec aac -f flv rtmp://127.0.0.1/live/$name";
           

当你向PingOS请求播放http-flv流的时候,PingOS就会触发ffmpeg向rtsp源拉流并且转推到本地。

举个栗子:

播放http-flv流:http://127.0.0.1/flv/cam01?ip=192.168.1.5&uri=/h264/channel1

ffmpeg则会向拉取rtsp流:rtsp://192.168.1.5/h264/channel1,并且将内容推送给PingOS服务器。

关于配置中使用到的$name等变量的含义,可以参考PingOS的官方文档

QQ交流群:697773082

QQ交流群:697773082

继续阅读