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

如何使用FFmpeg暂停流?求助:实现一分钟暂停功能的代码修改

在FFmpeg代码中实现一分钟暂停的修改方案

方案1:无条件暂停(每次读取帧后暂停)

如果需要每次成功读取帧后暂停一分钟,直接在av_read_frame执行成功后加入睡眠逻辑即可,注意跨平台的API差异:

ret = av_read_frame(ifmt_ctx, &pkt);
if (ret < 0) {
    break;
}

// 暂停一分钟
#ifdef _WIN32
Sleep(60 * 1000);  // Windows系统:Sleep函数参数为毫秒
#else
sleep(60);         // Linux/macOS系统:sleep参数为秒,也可用usleep(60000000)
#endif

方案2:按需触发暂停(满足条件时暂停)

如果需要在特定条件下触发暂停(比如达到某帧时间戳、外部控制信号),可以通过标志变量控制:

// 假设你有一个控制暂停的标志位,比如外部触发后设为1
int need_pause = 0;

// 检查是否需要暂停
if (need_pause) {
    // 执行一分钟暂停
    #ifdef _WIN32
    Sleep(60 * 1000);
    #else
    sleep(60);
    #endif
    need_pause = 0; // 暂停结束后重置标志
}

ret = av_read_frame(ifmt_ctx, &pkt);
if (ret < 0) {
    break;
}

注意事项

  • 直接调用睡眠函数会阻塞当前线程,如果是带GUI的程序,不要在主线程执行这段逻辑,要把音视频处理放到单独的工作线程中。
  • 如果处理的是实时流媒体,暂停期间可能会丢失后续推送的帧,若需要保留帧数据,建议先将读取到的帧缓存到队列,再执行暂停逻辑。
  • 跨平台开发时,记得通过宏定义区分Windows和类Unix系统的睡眠API,避免编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:06:21