I am using janus-gateway for recording in web-browser. Once the recording is completed, two files are generated, one is audio and another is a video. Both have format mjr. How can I combine both these files to create a single file?
问问题
3123 次
3 回答
7
我正在处理同样的需求。
如果您进行了默认的 janus-gateway 安装,您只会错过以下步骤:
在下载 git 源的文件夹上运行它:
./configure --enable-post-processing
然后
make
(sudo) make install
然后为您想要将它们转换为音频/视频格式的每个文件运行此命令:
./janus-pp-rec /opt/janus/share/janus/recordings/video.mjr /opt/janus/share/janus/recordings/video.webm
./janus-pp-rec /opt/janus/share/janus/recordings/audio.mjr /opt/janus/share/janus/recordings/audio.opus
如果你没有安装 ffmpeg 运行这个(我在 Ubuntu 上,在其他发行版上 ffmpeg 可能已经在 apt-get 存储库中)
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg
然后最后将音频与视频合并:
(sudo) ffmpeg -i audio.opus -i video.webm -c:v copy -c:a opus -strict experimental mergedoutput.webm
从那里您可以构建一个 shell 脚本来在 cron 上自动转换所有 mjr 文件
于 2017-01-19T14:24:16.250 回答
0
sudo apt-get install libavutil-dev libavcodec-dev libavformat-dev
安装依赖后...
./configure --prefix=/opt/janus --enable-post-processing
然后使用这个 BASH 文件
#!/bin/bash
# converter.sh
# Declare the binary path of the converter
januspprec_binary=/opt/janus/bin/janus-pp-rec
# Contains the prefix of the recording session of janus e.g
session_prefix="$1"
output_file="$2"
# Create temporary files that will store the individual tracks (audio and video)
tmp_video=/tmp/mjr-$RANDOM.webm
tmp_audio=/tmp/mjr-$RANDOM.opus
echo "Converting mjr files to individual tracks ..."
$januspprec_binary $session_prefix-video.mjr $tmp_video
$januspprec_binary $session_prefix-audio.mjr $tmp_audio
echo "Merging audio track with video ..."
ffmpeg -i $tmp_audio -i $tmp_video -c:v copy -c:a opus -strict experimental $output_file
echo "Done !"
以下命令应该可以解决问题:
bash converter.sh ./room-1234-user-0001 ./output_merged_video.webm
于 2021-05-29T06:51:03.357 回答
0
我有一个使用 Gstreamer 在 C 中执行此操作的非常原始的示例。请注意,此代码非常混乱,但它应该向您展示您需要做什么。
以下是合并这些文件需要执行的操作的列表:
- 构建 RTP 缓冲区列表,以便您可以在文件中迭代它们。janus-gateway 后处理中有这样的例子
- 同时开始迭代您的文件。时间戳应该可以同步,尽管我遇到了数据包在写入时丢失或损坏的问题,这将搞砸合并
- 我解码媒体并在此处重新编码,以便我可以静态设置视频的帧速率和大小。我确信有一种方法可以做到这一点,而无需对媒体进行转码。
- 多路复用并写入文件
我执行步骤 1 与 janus 后处理器完全一样。第 2 步我将每个 rtp 数据包从文件推送到 gstreamer appsrc 元素。步骤 3 和 4 在 gstreamer 管道中完成。
于 2015-08-08T21:12:40.973 回答