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

如何使用Java+Playwright录制浏览器/系统音频(Windows10环境)

在Java+Playwright+Windows 10环境录制通话前5秒音频

一、优先方案:捕获浏览器专属音频

Playwright本身无原生音频录制能力,需结合Windows核心音频API与Java库实现精准捕获:

  • 1. 定位浏览器音频会话
    Windows为每个进程分配独立音频会话,通过JNA调用Core Audio API枚举会话,匹配Playwright启动的Chromium进程ID,锁定目标音频流。核心思路代码(依赖JNA):

    // 获取Playwright Chromium进程ID
    Browser browser = playwright.chromium().launch();
    long pid = browser.process().pid();
    
    // 借助JNA调用Core Audio API,枚举音频会话并匹配pid(需自行封装接口)
    
  • 2. 录制并保存音频
    使用javax.sound.sampled库捕获目标会话音频流,录制5秒后保存为WAV文件:

    AudioFormat format = new AudioFormat(44100, 16, 2, true, true);
    TargetDataLine captureLine = AudioSystem.getTargetDataLine(format);
    // 通过Core Audio API将captureLine绑定到浏览器音频会话
    captureLine.open(format);
    captureLine.start();
    
    ByteArrayOutputStream audioBuffer = new ByteArrayOutputStream();
    byte[] tempBuffer = new byte[4096];
    long start = System.currentTimeMillis();
    
    while (System.currentTimeMillis() - start < 5000) {
        int read = captureLine.read(tempBuffer, 0, tempBuffer.length);
        audioBuffer.write(tempBuffer, 0, read);
    }
    
    // 写入本地文件
    AudioSystem.write(
        new AudioInputStream(new ByteArrayInputStream(audioBuffer.toByteArray()), format, audioBuffer.size() / format.getFrameSize()),
        AudioFileFormat.Type.WAVE,
        new File("call_start.wav")
    );
    
    captureLine.stop();
    captureLine.close();
    
  • 依赖与权限
    需引入JNA依赖:

    <!-- Maven依赖 -->
    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>5.13.0</version>
    </dependency>
    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna-platform</artifactId>
        <version>5.13.0</version>
    </dependency>
    

    程序需以管理员权限运行,否则无法访问系统音频会话。

二、替代方案:录制系统全局音频

若浏览器会话捕获实现复杂,可直接录制系统输出音频,步骤更简便:

  • 1. 启用Windows立体声混音
    打开Windows声音设置→录制选项卡→右键显示禁用设备→启用「立体声混音」,作为音频捕获源。

  • 2. 用JavaCV实现录制
    借助JavaCV封装的FFmpeg接口快速实现系统音频录制:

    FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("audio=立体声混音");
    grabber.setFormat("dshow");
    grabber.setSampleRate(44100);
    grabber.start();
    
    FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("call_start.wav", 2);
    recorder.setFormat("wav");
    recorder.setSampleRate(44100);
    recorder.start();
    
    long start = System.currentTimeMillis();
    while (System.currentTimeMillis() - start < 5000) {
        Frame frame = grabber.grab();
        if (frame != null) recorder.record(frame);
    }
    
    recorder.stop();
    grabber.stop();
    
  • 依赖说明
    引入JavaCV Maven依赖:

    <dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacv-platform</artifactId>
        <version>1.5.9</version>
    </dependency>
    

三、结合Playwright触发录制时机

要精准在通话开始时启动录制,需监听网页的通话触发事件:

// 示例:监听通话按钮点击后启动录制
page.locator("#start-call-btn").click();
new Thread(() -> {
    // 执行上述录制逻辑
}).start();

// 或监听通话状态变化后启动录制
page.waitForSelector("#call-status:text('已接通')").then(__ -> {
    new Thread(() -> {
        // 执行录制
    }).start();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:27:49