标签: opus

使用Android中的Opus Codec录制和播放

我正在开发一个需要用Opus Codec录制和播放的项目,我搜索了很多,但我找不到使用该解决方案的任何演示/示例.我发现有一个带编码器的演示但无法找到解码器.我只用C找到这个编解码器的源代码,你能帮帮我吗?

android encoder decoder recorder opus

7
推荐指数
1
解决办法
4752
查看次数

与android 5.0一起使用时java.lang.UnsatisfiedLinkError

我正在构建一个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)

java-native-interface android opus android-5.0-lollipop

7
推荐指数
1
解决办法
831
查看次数

用ogg容器封装从RTP包中提取的opus负载的实现

我们有捕获的 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 方库?

rtp ogg opus

7
推荐指数
1
解决办法
1771
查看次数

如何为高质量 Opus 音频设置 SDP

我一直在尝试通过 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)

javascript audio sdp webrtc opus

6
推荐指数
2
解决办法
5630
查看次数

监听OPUS编码流

目前,我正在开发一个应用程序,该应用程序获取音频流(原始编码字节)并对其应用一些转换(重新采样、将立体声转换为单声道等)。我已经使用 opus 编解码器实现了对原始字节的编码,JNI但我有一个小问题:

有没有办法收听保存到文件中的 opus 编码流?我知道,如果我添加一些文件头并执行一些附加操作,我应该能够将其保存为 OGG 文件,但我不想浪费时间实现功能只是为了在测试中收听音频。

理想情况下,我想找到一个能够播放此类流的工具,就像 audacity 正在播放的那样RAW(当然在添加编码参数之后)。

谢谢。

java audio-streaming opus

6
推荐指数
1
解决办法
2568
查看次数

使用ExternalProject_Add将Opus包含在Android中

这可能很简单。

我有一个使用 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)

android cmake android-ndk opus external-project

6
推荐指数
1
解决办法
2347
查看次数

如何将 FEC 功能用于 Opus 编解码器

我正在尝试使用 opus 前向纠错 (FEC) 功能。我有一个服务,它使用 OPUS_SET_INBAND_FEC(1) 和 OPUS_SET_PACKET_LOSS_PERC(20) 进行编码,并使用 10ms 数据包并通过 UDP 发送它们。

虽然我不清楚解码过程。

  1. 当一个数据包丢失时,我是否只需要使用 fec=1 调用 decode 或者我是否需要在下一个数据包之后调用 fec=0 的 decode ?
  2. 我如何预先知道我在启用 fec 的情况下发送以解码的 pcm 的大小?

audio opus

6
推荐指数
1
解决办法
2510
查看次数

Google SpeechToText API:OGG Opus 音频流没有响应文本

我正在使用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 工作所需的 …

javascript ogg opus google-speech-api google-cloud-speech

6
推荐指数
0
解决办法
458
查看次数

从 websocket 播放 OPUS 时的声音调度问题

我正在尝试使用库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)

javascript websocket opus

6
推荐指数
1
解决办法
101
查看次数

错误:找不到模块“@discordjs/opus”

每次我运行我的不和谐语音识别代码时,它都会在线,但是一旦它加入频道,我的代码就会显示错误:找不到模块“@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)

javascript node.js npm opus discord.js

6
推荐指数
2
解决办法
4742
查看次数