[英]Low Latency DASH Nginx RTMP
我在媒体服务器上使用arut nginx-rtmp-module( https://github.com/arut/nginx-rtmp-module ),然后我尝试使用FFmpeg流式传输到dash
应用程序,然后我通过播放来测试流使用VLC。
它等待大约30秒开始播放,它从头开始播放,而不是当前的时间戳。
这是我在RTMP块上的当前配置
rtmp {
server {
listen 1935;
application live {
live on;
exec ffmpeg -re -i rtmp://localhost:1935/live/$name
-c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost:1935/hls/$name_low
-c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost:1935/hls/$name_mid
-c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost:1935/hls/$name_hi
-c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost:1935/dash/$name_dash;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_nested on;
hls_variant _low BANDWIDTH=160000;
hls_variant _mid BANDWIDTH=320000;
hls_variant _hi BANDWIDTH=640000;
}
application dash {
live on;
dash on;
dash_path /tmp/dash;
dash_nested on;
}
}
}
这是我用于流式传输的命令
ffmpeg -re -i 2014\ SPRING.mp4 -c copy -f flv
rtmp://52.221.221.163:1935/dash/spring
如何减少延迟,并使其与流媒体的时间戳相同?
我能达到5秒以下的延迟吗?
UPDATE
尝试使用此指令更改播放列表长度和片段长度
dash_playlist_length 10s;
dash_fragment 2s;
但仍然存在一些延迟问题,有时它比以前小,有时它是相同的
我能达到5秒以下的延迟吗?
DASH是一种分段协议,意味着您的媒体被切割成相对较大的块。 玩家必须先下载一些块才能开始播放它们。 您的编码器必须在这些块甚至出现在清单中之前上传整个块。 这是工作的错误工具,任何通过降低块大小来减少延迟的尝试都会给项目增加大量开销。 如果延迟对您很重要,那么您正在使用错误的工具 。
如何减少延迟,并使其与流媒体的时间戳相同?
你不能。 物理! 你不可能在编码的同时播放同样的东西。 您通过分组交换网络发送数据,其中许多编码/解码步骤都需要缓冲区,因为它们以块的形式工作。 回放同时播放内容的唯一方法是去模拟...至少在那里,你唯一的延迟就是光速。
您可以做的最好的事情是切换到专为低延迟而设计的协议,例如WebRTC。 只要确定你理解权衡。 您的编解码器将针对延迟而非质量进行优化...因此您的质量将受到影响。 WebRTC over UDP(可选但常见)意味着某些数据包会丢失,导致您的观看体验受损。 当你关心延迟时,如果你在这里或那里丢失了一块,那么重要的是你继续前进。 您可以通过TCP使用WebRTC,并使您的可靠性仅略微增加延迟。
确定对你来说真正重要的事情。 几乎在所有情况下,实际上并不是低延迟。 你无法全力以赴。 每种方法都有权衡。 您必须决定什么是最适合您的具体情况。
您可能需要在ffmpeg命令中更改GOP大小。 ffmpeg的默认GOP大小为250,这意味着每250帧会有一个关键帧。 如果您的输出是25fps,那么在最坏的情况下您将每10秒有一个关键帧(如果启用了场景剪切检测,则可能有更短的关键帧间隔)。
对于HLS和DASH,段必须以关键帧开始。 所以你会有很多段,持续时间为10秒。 您需要减少段持续时间(GOP大小)以减少延迟。
尝试修改您的ffmpeg命令,如下所示,看它是否有帮助
exec ffmpeg -re -i rtmp://localhost:1935/live/$name
-c:a libfdk_aac -b:a 32k -c:v libx264 -g 50 -b:v 128K -f flv rtmp://localhost:1935/hls/$name_low
-c:a libfdk_aac -b:a 64k -c:v libx264 -g 50 -b:v 256k -f flv rtmp://localhost:1935/hls/$name_mid
-c:a libfdk_aac -b:a 128k -c:v libx264 -g 50 -b:v 512K -f flv rtmp://localhost:1935/hls/$name_hi
-c:a libfdk_aac -b:a 128k -c:v libx264 -g 50 -b:v 512K -f flv rtmp://localhost:1935/dash/$name_dash;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.