我正在开发一个需要用Opus Codec录制和播放的项目,我搜索了很多,但我找不到使用该解决方案的任何演示/示例.我发现有一个带编码器的演示但无法找到解码器.我只用C找到这个编解码器的源代码,你能帮帮我吗?
我正在构建一个Android应用程序.使用Opus编解码器进行编码和解码.我在这里使用本地代码http://www.opus-codec.org/和这里的包装器https://github.com/jitsi/libjitsi/tree/master/src/native/opus.在Android 4.0+中,我创建了.so文件并运行,一切正常.但是在Android 5.0中,当我调用native方法时会崩溃.这是崩溃的细节:
java.lang.UnsatisfiedLinkError: No implementation found for long my.package.name.codec.Opus.encoder_create(int, int) (tried Java_my_package_name_codec_Opus_encoder_1create and Java_my_package_name_codec_Opus_encoder_1create__II)
Run Code Online (Sandbox Code Playgroud)
我也搜索了很多,但找不到根本原因,没有人和我有同样的问题.下面是我的mk文件,我认为它很有用.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
MY_MODULE_DIR := opus
LOCAL_MODULE := $(MY_MODULE_DIR)
LOCAL_SRC_FILES := $(wildcard ( libopus/src/*.c \
libopus/celt/*.c \
libopus/celt/arm/*.c \
libopus/silk/*.c \
libopus/silk/arm/*.c \
libopus/include/*.c \
libopus/silk/fixed/*.c \
my_package_name_codec_Opus.c ))
LOCAL_C_INCLUDES := \
libopus/src \
libopus/include \
libopus/silk \
libopus/silk/fixed \
libopus/silk/arm \
libopus/celt \
libopus/celt/arm \
libopus \
LOCAL_CFLAGS := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += …Run Code Online (Sandbox Code Playgroud) 我们有捕获的 pcap 文件,其中包含每个 rfc6716 的 RTP opus 有效载荷,现在我们可以切断 RTP 标头并提取 opus 有效载荷,我们想根据规范将有效载荷封装到 ogg opus https://tools.ietf.org/html /draft-ietf-codec-oggopus-07 (Ogg Encapsulation for the Opus Audio Codec) 并发送出去,这样 VLC 就可以播放捕获的 opus,我们不想保存到 ogg 文件然后让 VLC 播放,我们一旦封装了一个数据包,就会将 ogg opus 直接发送到 VLC,任何有封装的引用实现的人,或者我可以参考的第 3 方库?
我一直在尝试通过 WebRTC 传输一些高质量的音频流。Opus,主要宣传的编解码器似乎很完美,因为它可以支持高达 510kbit/s 的速度,远远超出需要。问题是,设置 Webrtc SDP 并不像看起来那么明显。感谢 Muaz Khan 的出色工作,我已经能够将其强制为 128kbit/s。基本上代码看起来像这样:
function setBandwidth(sdp) {
var sdpLines = sdp.split('\r\n');
// Find opus payload.
var opusIndex = findLine(sdpLines, 'a=rtpmap', 'opus/48000');
var opusPayload;
if (opusIndex) {
opusPayload = '109';
}
sdpLines[opusIndex]='a=rtpmap:'+opusPayload+' opus/48000/2';
var mediaIndex = findLine(sdpLines, 'm=audio');
sdpLines[mediaIndex]=(sdpLines[mediaIndex].slice(0,(sdpLines[mediaIndex].indexOf("RTP/SAVPF")+10))).concat(opusPayload);
var abIndex = findLine(sdpLines, 'a=mid:');
sdpLines[abIndex]='a=mid:audio\r\nb=AS:300000';
// Find the payload in fmtp line.
var fmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + opusPayload.toString());
if (fmtpLineIndex == null) {
sdpLines[opusIndex] = sdpLines[opusIndex].concat('\r\n'+'a=fmtp:' + opusPayload.toString()+ ' minptime=10; useinbandfec=1; maxaveragebitrate='+128*1024+'; …Run Code Online (Sandbox Code Playgroud) 目前,我正在开发一个应用程序,该应用程序获取音频流(原始编码字节)并对其应用一些转换(重新采样、将立体声转换为单声道等)。我已经使用 opus 编解码器实现了对原始字节的编码,JNI但我有一个小问题:
有没有办法收听保存到文件中的 opus 编码流?我知道,如果我添加一些文件头并执行一些附加操作,我应该能够将其保存为 OGG 文件,但我不想浪费时间实现功能只是为了在测试中收听音频。
理想情况下,我想找到一个能够播放此类流的工具,就像 audacity 正在播放的那样RAW(当然在添加编码参数之后)。
谢谢。
这可能很简单。
我有一个使用 NDK 的 Android 项目。我想将opus源代码包含在本机代码中。我尝试使用 CMake 的ExternalProject_Add 属性,但我的本机代码仍然无法从 Opus 库导入标头并且无法构建。
以下是我的ExternalProject_Add 定义:
ExternalProject_Add(project_opus
URL https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
BUILD_COMMAND make
INSTALL_COMMAND make install
)
ExternalProject_Get_Property(project_opus install_dir)
include_directories(${install_dir}/include)
add_library(opus SHARED IMPORTED)
add_dependencies(opus project_opus)
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} opus oboe OpenSLES)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 opus 前向纠错 (FEC) 功能。我有一个服务,它使用 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(20) 进行编码,并使用 10ms 数据包并通过 UDP 发送它们。
虽然我不清楚解码过程。
我正在使用SpeechToText API从现场麦克风录音中获取语音转录。这适用于简单的 LINEAR16 编码,但我需要减少带宽,因此我切换到 OGG Opus 编码。
使用这个库在 OGG Opus 客户端中记录和编码音频。
然后,它使用 websocket 发送到后端应用程序。
最后,后端应用程序以流模式请求 STT API,该模式保持静默(没有错误,但输出中也没有文本)。
这些是编码选项:
var options = {
monitorGain: 0,
recordingGain: 1,
numberOfChannels: 1,
encoderSampleRate: 16000,
encoderPath: "./javascript/ogg_opus/encoderWorker.min.js",
originalSampleRateOverride: 16000,
streamPages: true,
encoderApplication: 2048
};
Run Code Online (Sandbox Code Playgroud)
这是发送到 API 的配置:
{
encoding: 'OGG_OPUS',
language: 'fr',
rate: 16000
}
Run Code Online (Sandbox Code Playgroud)
这是将音频发送到 websocket 的方式:
recorder.ondataavailable = function(typedArray){
var dataBlob = new Blob([typedArray], { type: 'audio/ogg' });
websocket.emit('audio_data', dataBlob);
};
Run Code Online (Sandbox Code Playgroud)
后端部分是用 Python 开发的,遵循这个例子。
您知道使 API 工作所需的 …
我正在尝试使用库https://github.com/AnthumChris/opus-stream-decoder/
我有一个来自高质量麦克风的 OPUS 编码声音流(2ch,48kHz)(但我在其上循环播放音乐以进行测试)。我知道它有效,因为如果我使用,我可以听到它:
websocat --binary ws://third-i.local/api/sound - | mpv -
(它正在打开 websocket 并将其输出流式传输到 mpv(mplayer))。
但是当我在浏览器中播放时,我每秒钟左右只听到很小的一部分声音。但是声音本身听起来不错(我相信它只是音乐中很小的一部分)。
下面是我写的在浏览器中收听的 JS 代码:
let audioWorker: any;
let exampleSocket;
let opusDecoder: any;
let audioCtx: any;
let startTime = 0;
let counter = 0;
function startAudio() {
/*
const host = document.location.hostname;
const scheme = document.location.protocol.startsWith("https") ? "wss" : "ws";
const uri = `${scheme}://${host}/api/sound`;
*/
const uri = "ws://third-i.local/api/sound";
audioCtx = new AudioContext();
startTime = 100 / 1000;
exampleSocket = new WebSocket(uri);
exampleSocket.binaryType = "arraybuffer"; …Run Code Online (Sandbox Code Playgroud) 每次我运行我的不和谐语音识别代码时,它都会在线,但是一旦它加入频道,我的代码就会显示错误:找不到模块“@discordjs/opus”
Require stack:
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\util\loader.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\Opus.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BasePlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BroadcastAudioPlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\VoiceBroadcast.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\ClientVoiceManager.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\Client.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\index.js
Error: Cannot find module 'node-opus'
Require stack:
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\util\loader.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\Opus.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BasePlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BroadcastAudioPlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\VoiceBroadcast.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\ClientVoiceManager.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\Client.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\index.js
Error: Cannot find module 'opusscript'
Require stack:
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\util\loader.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\Opus.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\opus\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\prism-media\src\index.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BasePlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\player\BroadcastAudioPlayer.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\VoiceBroadcast.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\voice\ClientVoiceManager.js
- C:\Users\SURYASH\Desktop\DiscordSpeechBot\node_modules\discord.js\src\client\Client.js
- …Run Code Online (Sandbox Code Playgroud)