PingOS服务器系统常见问题总结

转载请注明出处:https://blog.csdn.net/impingo
我的开源项目地址:https://github.com/pingostack/pingos
开源项目:https://pingos.io

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


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
在这里插入图片描述

以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推流工具为例,要想尽量减少延时,可以参考如下配置:

在这里插入图片描述

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/offcache_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的值就是播放器缓存大小,可按需调整。
在这里插入图片描述

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

关于HLS的延时优化,除了在前文2. 如何降低直播延时?中提到的操作外,服务器端主要是通过降低切片大小来实现。
这里主要介绍三个配置:

hls_fragment 1300ms;
hls_max_fragment 1800ms;
hls_playlist_length 3900ms;
  • hls_fragmenthls_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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值