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

如何在无摄像头和显示器下运行pjsua:文件发流与收流录制

解决方案

一、接收视频录制到文件

命令行方式

直接用pjsua内置的录制参数即可实现:

  • 添加 --record-video=<output_file> 参数,指定输出的AVI文件路径,pjsua会自动把接收到的视频流写入该文件。
  • 注意:编译pjsua时要开启 PJMEDIA_HAS_VIDEO_RECORD=1 编译选项,否则该功能无法使用。

自定义开发方式

如果是基于pjsua API做二次开发:

  • 初始化视频设备后,调用 pjmedia_vid_dev_set_rec_file() 函数,传入视频设备句柄、输出文件路径和格式参数,就能启用录制功能。
  • 要是需要更灵活的控制,也可以在视频帧回调里自行处理帧数据并写入文件,但这种方式复杂度高,优先推荐用内置的录制功能。

二、禁用摄像头与显示设备(实现null-video功能)

没错,你需要像null-audio那样用null视频设备替代真实的摄像头和显示组件,具体分两种场景实现:

命令行方式

通过参数直接指定null设备:

  • 用 --vid-src=null 强制视频输入采用null设备,避免调用真实摄像头。
  • 用 --vid-render=null 指定视频渲染采用null设备,不会创建任何显示窗口。
  • 如果命令行参数不生效,可以修改pjsua配置文件 pjsua.cfg,在 [video] 段中添加:
    vid_src = null
    vid_render = null
    

自定义开发方式

需要手动注册并使用null视频设备:

  1. 初始化pjsua前,调用 pjmedia_null_vid_dev_init() 注册null视频设备驱动(编译时要开启 PJMEDIA_HAS_NULL_VIDEO_DEV=1)。
  2. 枚举视频设备,找到名称为"Null Video Device"的设备ID,分别设为视频输入和输出设备ID。
  3. 在 pjsua_vid_config 配置结构体中,把 auto_show 设为 PJ_FALSE,禁止自动弹出显示窗口。

三、完整命令行示例

结合你已掌握的视频发送参数,完整命令如下:

pjsua --play-avi=input.avi --record-video=output.avi --vid-src=null --vid-render=null

四、开发参考

自定义开发时,可参考pjsip的核心文件:

  • pjmedia/include/pjmedia/null_vid_dev.h:null视频设备的初始化与使用接口说明。
  • pjmedia/include/pjmedia/vid_dev.h:视频设备录制相关函数(如 pjmedia_vid_dev_set_rec_file())的定义。
  • pjsip/include/pjsua-lib/pjsua_vid.h:pjsua视频配置结构体 pjsua_vid_config 的详细说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:25:22