【问题标题】:x264: Using NAL size limitation ruins the streamx264:使用 NAL 大小限制会破坏流
【发布时间】:2014-04-29 20:08:55
【问题描述】:

我正在使用 x264 通过以下设置压缩来自网络摄像头的视频流:

x264_param_default_preset(&param, "veryfast", "zerolatency");

param.i_threads = 1;
param.i_fps_den = 1;
param.b_annexb = 1;

param.i_keyint_max = 30;
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;

param.b_repeat_headers = 1;
x264_param_apply_profile(&param, "baseline");

param.i_slice_max_size = X264_NAL_MAX_SIZE;

我想将 NAL 调整为 MTU 大小,但如果我设置了一个较小的最大大小,则流将被破坏 - 它在黑白之间随机闪烁,背景中有一些原始图像的线索。 max_size 越大,流被破坏的可能性就越小。所以我的问题是 - 我们可以拥有小的 NALU 和正确的视频流吗?

UPD:我使用 FFmpeg 作为解码器。

【问题讨论】:

  • i_slice_max_size 应该可以正常工作。如果您有问题,那么您需要提供有关您的编码代码和用于复用/编写编码 NAL 的代码的更多信息。同样,如果您能提供解码时遇到问题的编码流,那么启动它会很好。
  • ^ 这个。问题不在于 x264。这是您的网络或播放代码。
  • @szatmary - 你是对的,问题不在于 x264,而在于网络和播放代码。谢谢!

标签: c++ streaming video-streaming x264 libx264


【解决方案1】:

问题实际上不在于 x264。我认为 x264 没问题,并检查了所有其他管道。问题是 - 我曾经通过网络将 NAL 单独发送到 avcodec 解码器 - 这正是解码器无法处理的事情 (explanation)。我花了一段时间才弄明白。

一旦我将 NAL 单元重新组合成原始组,从相同的帧派生,问题就消失了。这也解释了为什么结合使用小型 NAL 和大量移动更容易重现该问题 - 它产生了许多单个 NAL,而 avcodec 无法正确解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多