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

Kurento Media Server无音频录制功能异常问题求助

Kurento Recorder Demo: 0KB Recording When Disabling Audio (audio: false)

我之前也碰到过类似的问题,结合你描述的情况——官方kurento-recorder demo默认正常,但禁用音频后录制文件始终为0KB,且有数据流到服务器、Stop按钮报错——大概率是Kurento的RecorderEndpoint没有正确配置为仅录制视频导致的。下面是具体的分析和解决步骤:

问题根源

当你设置audio: false后,前端只向Kurento发送视频流,但默认的RecorderEndpoint配置可能期望同时接收音频和视频轨道。如果没有明确指定仅录制视频,Kurento会等待音频流就绪,迟迟不启动录制流程,最终生成空文件。另外,前端的Stop按钮报错可能是因为录制会话未正确初始化,导致状态混乱触发了错误的事件。

解决步骤

1. 修改后端RecorderEndpoint配置(关键)

无论你用的是Node.js还是Java后端,需要在创建RecorderEndpoint时明确指定仅视频的媒体配置文件,确保Kurento只处理视频流:

Node.js后端示例:

// 替换原来的RecorderEndpoint创建代码
const recorderEndpoint = kurento.create('RecorderEndpoint', {
  uri: 'file:///path/to/your-recording.webm',
  mediaProfile: 'WEBM_VIDEO_ONLY' // 明确指定仅视频的WEBM格式
});

Java后端示例:

// 替换原来的RecorderEndpoint构建代码
RecorderEndpoint recorderEndpoint = new RecorderEndpoint.Builder(pipeline, "file:///path/to/your-recording.webm")
    .withMediaProfile(MediaProfileSpecType.WEBM_VIDEO_ONLY) // 指定仅视频配置
    .build();

如果需要录制MP4格式,把WEBM_VIDEO_ONLY换成MP4_VIDEO_ONLY即可。

2. 前端验证媒体流

在前端获取媒体流后,添加日志确认只有视频轨道被获取,排除前端流的问题:

navigator.mediaDevices.getUserMedia(mediaConstraints)
  .then(stream => {
    const tracks = stream.getTracks();
    console.log("当前媒体流轨道:", tracks);
    // 确保输出里只有video类型的轨道
    videoInput.srcObject = stream;
    // 继续后续WebRTC连接逻辑
  })
  .catch(err => console.error("获取媒体流失败:", err));

3. 检查Kurento日志细节

虽然你说日志无特殊异常,但可以查看更详细的媒体协商日志,确认视频流是否正确到达RecorderEndpoint:

# 查看Kurento的详细日志
tail -f /var/log/kurento-media-server/kurento-media-server.log | grep -E "RecorderEndpoint|SDP"

重点看是否有RecorderEndpoint相关的“start”日志,以及SDP交换中是否只包含视频媒体描述。

4. 修复前端Stop按钮状态问题

前端的Stop按钮报错可能是因为录制会话未正确启动,导致状态变量混乱。可以在代码中添加录制状态的判断,比如只有在recordingActive为true时才响应Stop操作:

// 假设你有一个recordingActive变量标记录制状态
stopButton.addEventListener('click', () => {
  if (!recordingActive) {
    console.warn("录制未启动,无法停止");
    return;
  }
  // 执行停止录制的逻辑
  recorderEndpoint.stop()
    .then(() => {
      recordingActive = false;
      // 更新UI状态
    })
    .catch(err => console.error("停止录制失败:", err));
});

总结

核心问题就是RecorderEndpoint默认需要同时处理音视频流,禁用音频后必须明确配置仅视频的媒体Profile,否则Kurento不会启动录制流程。按上面的步骤修改后,应该就能生成正常的纯视频录制文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:17:12