我正在尝试配置 ffmpeg 以使用网络摄像头进行实时视频流。我使用的ffmpeg编码器命令如下。
ffmpeg -f v4l2 -input_format yuyv422 -s 640x480 -i /dev/video0 -c:v libx264 -profile:v baseline -trellis 0 -subq 1 -level 32 -preset superfast -tune zerolatency -me_method epzs -crf 30 -threads 0 -bufsize 1 -refs 4 -coder 0 -b_strategy 0 -bf 0 -sc_threshold 0 -x264-params vbv-maxrate=2000:slice-max-size=1500:keyint=30:min-keyint=10: -pix_fmt yuv420p -an -f mpegts udp://192.168.1.8:5001
Run Code Online (Sandbox Code Playgroud)
用于显示视频源的 ffplay 命令是,
ffplay -analyzeduration 1 -fflags -nobuffer -i udp://192.168.1.8:5001
Run Code Online (Sandbox Code Playgroud)
但是,我在视频流中遇到了 0.5 - 1.0 秒的延迟。有没有办法将其减少到小于 100 毫秒。此外,当我用 x11grab 的屏幕捕获替换 v4l2 相机捕获时,流几乎是实时的,我没有遇到明显的延迟。此外,将编码器从 x264 更改为 mpeg2 对延迟没有影响。此外,来自 ffmpeg 的统计数据显示编码器以 30fps …
ffmpeg video-encoding video-streaming live-streaming libx264
我正在使用ffmpeg使用以下命令生成MPEG-TS流.
ffmpeg -i file1.mp4 -c:v libx265 -x265-params crf=25 -c:a copy output1.ts
Run Code Online (Sandbox Code Playgroud)
使用时检查output1.ts,
ffplay -i output1.ts -vf showinfo
Run Code Online (Sandbox Code Playgroud)
揭示pts_time下的开始时间戳不等于零.它显示1.48.
一个复用使用
ffmpeg -i output1.ts -c:v copy -c:a copy -mpegts_copyts 1 output2.ts
Run Code Online (Sandbox Code Playgroud)
导致output2.ts的开始时间戳为0.08.
如果有人能解释我这种行为的原因以及如何将开始时间戳设置为零,我将非常感激.
我正在尝试从 MPEG-TS 数据包中提取 PCR 时间值。根据wiki,PCR 包含 33+6+9 个位数,并且还指出前 33 位基于 90 kHz 时钟,而后 9 位基于 27 MHz 时钟。当 PCR 标志启用时,我提取适应字段字节后面的位。
问题是,如何通过考虑各自的时钟频率值,用我拥有的这 48 (33+6+9) 位来计算 PCR 时间戳值。
谢谢。