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

如何将ActionScript3获取的512浮点音频ByteArray输入FFMPEG避免损坏

ActionScript 3 向FFMPEG推流音频损坏解决方案

问题原因

  • SoundMixer.computeSpectrum 第二个参数设为false时,输出的ByteArray为512个32位大端单精度浮点数:前256个是左声道时域采样值,后256个是右声道时域采样值,数值范围为[-1.0, 1.0]
  • 未显式指定FFMPEG输入的原始音频格式,FFMPEG默认按其他格式解析,直接导致音频损坏

修复步骤

1. AS3侧代码调整

显式指定ByteArray字节序,避免不同环境默认值差异导致解析错误,同时增加缓冲区刷新避免延迟,修改后代码如下:

import flash.utils.Endian;

stage.addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void{
    var soundBA:ByteArray = new ByteArray();
    SoundMixer.computeSpectrum(soundBA, false, 0);
    // 显式指定大端序,匹配FFMPEG对应格式要求
    soundBA.endian = Endian.BIG_ENDIAN;
    process.standardInput.writeBytes(soundBA);
    // 刷新输入缓冲区,避免数据堆积导致音频延迟
    process.standardInput.flush();
}

2. FFMPEG启动参数调整

启动FFMPEG时必须明确指定输入的原始音频格式,参考参数如下:

ffmpeg -f f32be -ac 2 -ar 对应采样率 -i pipe:0 【你的其他输出配置】

参数说明:

  • -f f32be:指定输入格式为32位大端单精度浮点数
  • -ac 2:指定输入为双声道,如果你只需要单声道可以只提取ByteArray前256个浮点数写入,同时把该参数改为-ac 1
  • -ar 对应采样率:采样率计算公式为 舞台帧率 × 256,比如舞台帧率为60fps时,采样率为60×256=15360,需要把该参数改为对应数值,否则会出现音频速度异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:06:01