我有这个使用 gst-plugin-1.0 的现有程序,它通过了这个:
-e udpsrc port=3003 buffer-size=200000 ! h264parse ! queue ! http://mux.video_0 alsasrc device=plughw:1,0 ! "audio/x-raw,channels=1,depth=16,width=16,rate=44100" ! voaacenc bitrate=128000 ! aacparse ! queue ! http://mux.audio_0 qtmux name=mux ! filesink location="$RECPATH/record-`date +%Y%m%d%-H%M%S`.mp4" sync=true
这将从 x264 格式的 udp 源获取视频,并直接从麦克风获取音频。它可以工作,但由于它不会同时对视频和音频进行编码,因此当视频流有延迟时(由于更高的质量设置),我对音频有一些延迟。
因此,作为快速修复,我正在考虑在录音上添加延迟以进行补偿。我会根据视频质量手动计算延迟。
约束:gst-launch-1.0 版本 1.10.4(在树莓派上,debian 拉伸),use-driver-timestamps 似乎无法访问,我收到错误“警告:错误的管道:没有属性”use-driver -timestamps”在元素“alsasrc0”'中。
所以我的问题是:有没有一种简单的方法可以为音频添加延迟?
我正在尝试使用库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)