如何将通过webrtc运动流接收的OPUS文件中的数据解码为PCM格式?

问题描述

对于我正在处理的应用程序之一,我需要通过webrtc将音频和视频从Web应用程序流传输到后端。这是使用kinesis webrtc JS sdk完成的,使用者是使用Kinesis webrtc c sdk的查看器。

我能够获取视频和音频数据。 Webrtc现在仅支持pcm编码。我的最终目标是使用音频流通过AWS transcribe进行转录。 AWS transcribe仅支持PCM编码。所以我需要将作品数据转换为pcm数据。

我在后端接收的音频数据包大约每个数据包160字节。当我尝试将字节保存到opus文件中并使用“ opusdec”进行解码时,出现以下错误-

WARNING: Hole in data (4 bytes) found at approximate offset 160 bytes. Corrupted Ogg.
WARNING: Hole in data (156 bytes) found at approximate offset 160 bytes. Corrupted Ogg.
ERROR: No Ogg data found in file "sample-000.opus".
Input probably not Ogg.

从后端流式传输的数据具有有效的opus文件,之所以这样说,是因为当我看到aws kinesis控制台媒体播放器查看流时,视频和音频正在正确播放。

您能告诉我如何利用后端数据包中的opus流数据吗? 我需要能够将其转换为PCM编码并使用aws transcribe。

解决方法

AWS Transcribe现在应该支持Ogg Opus文件(请参见press release

Amazon Transcribe支持Ogg和WebM格式的文​​件的OPUS编码音频。

如果音频从头到尾都是封装的Ogg Opus文件,则应该可以保存它。您可以通过检查前256个字节并查找“ OggS”(这是Ogg页面边界)来验证这一点:

$ xxd -l 256 audio.opus

如果音频字节不是Ogg Opus文件,而是未封装的原始Opus数据包,则在保存文件之前,您需要将Opus数据包“打包”为容器格式(Ogg,WebM等)。

>