有时,当使用 Video Toolbox Encoder 对视频进行编码以进行网络直播时,解码器输出始终有 4 帧延迟

问题描述 投票:0回答:1

我正在使用 VideoToolbox VTCompressionSession 以 H264 格式对帧进行编码,我将通过网络套接字将其发送到浏览器。接收到的帧将被解码,输出将在网站中呈现。现在,当使用某些编码器时,视频的渲染始终具有四帧延迟。

如何将帧发送到服务器:

开始>------------ f1 ------------ f2 ------------ f3 -------- ---- f4 ------------- f5 ...

渲染是如何发生的:

开始>------------------------------------------------------------ --------------------------- f1 ------------ f2 --------- --- f3 ------------ f4 ----------- ...

这个有时会变成两帧延迟,有时会变成十六帧延迟,因此可用性受到影响。

我在 videotoolbox 的 VTCompressionSession 中使用此配置:

kVTCompressionPropertyKey_AverageBitRate=3MB
kVTCompressionPropertyKey_ExpectedFrameRate=24
kVTCompressionPropertyKey_RealTime=true
kVTCompressionPropertyKey_ProfileLevel=kVTProfileLevel_H264_High_AutoLevel
kVTCompressionPropertyKey_AllowFrameReordering = false
kVTCompressionPropertyKey_MaxKeyFrameInterval=1000

使用相同的配置,我能够使用

com.apple.videotoolbox.videoencoder.h264.gva
实现 1 输入 - 1 输出。这个问题是使用编码器进行复制
com.apple.videotoolbox.videoencoder.ave.avc

不确定其编码器是否特定。我还发现两个编码器的编码输出之间的 VUI 参数存在差异。

我想知道是否可以通过编码器配置或 VideoToolBox 提供的另一个 API 来解决此问题,以确保解码器同时解码和渲染帧。

提前致谢......

video-streaming live-streaming video-toolbox
1个回答
0
投票

作为 h264 规范,当

sps.pic_order_cnt_type = 2
or 
SPS.pic_order_cnt_type = 0 then
* VUI.max_dec_frame_buffering >= num_ref_frames
* SEI.pic_timing.dpb_output_delay = 0

解码器可以是 1 个数据包输入 1 个帧输出。

但是 h264_videotoolbox 有

pic_order_cnt_type=0

且无法修改。

所以某些解码器可能缓冲超过 16 帧。

© www.soinside.com 2019 - 2024. All rights reserved.