You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg.AutoGen多进程解码视频时CPU占用率异常升高问题求助

FFmpeg.AutoGen多进程解码CPU占用率异常飙升问题

我正在使用FFmpeg.AutoGen API解码视频流,遇到关键问题:单进程运行时CPU占用率约0.5%,但开启约20个同类进程后,每个进程的CPU占用率最高可达3%。

任务管理器截图:
任务管理器截图1
任务管理器截图2

线程架构

读包与解码操作分别在不同线程执行。

读包相关代码

private static unsafe void Read(VideoStreamReader reader)
{
    while (true)
    {
        reader.TryReadNextPacket();
    }
}
public void TryReadNextPacket()
{
    ffmpeg.av_read_frame(_pFormatContext, _pPacket);

    if (_pPacket->stream_index == _streamIndex)
        Program.packets.Enqueue(*_pPacket);
    else
        ffmpeg.av_packet_unref(_pPacket);
}

解码相关代码

private static unsafe void Decode(VideoStreamDecoder decoder)
{
    while (true)
    {
        Console.WriteLine($"{packets.Count} BEFORE");
        if (packets.Count > 0)
        {
            packets.TryDequeue(out var packet);
            Console.WriteLine($"{packets.Count} AFTER");
            decoder.TryReadNextFrame(out var frame, packet);

            _frame = frame;
        }
        else
        {
            Thread.Sleep(40);
        }
    }
}
public void TryReadNextFrame(out AVFrame frame, AVPacket packet)
{
    ffmpeg.avcodec_send_packet(_pCodecContext, &packet);
    ffmpeg.av_packet_unref(&packet);
    ffmpeg.avcodec_receive_frame(_pCodecContext, _pFrame);
    ffmpeg.av_hwframe_transfer_data(_receivedFrame, _pFrame, 0);
    frame = *_receivedFrame;
}

已排查的方向

  • 禁用基于Vulkan的渲染后,CPU占用率仍随进程数量增长,排除渲染环节的影响;
  • 禁用解码仅保留渲染时,CPU占用率保持稳定,明确问题根源在解码流程中。

内容的提问来源于stack exchange,提问作者faith0058

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:35:04