4

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?

4

3 回答 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 中执行此操作的非常原始的示例。请注意,此代码非常混乱,但它应该向您展示您需要做什么。

以下是合并这些文件需要执行的操作的列表:

  1. 构建 RTP 缓冲区列表,以便您可以在文件中迭代它们。janus-gateway 后处理中有这样的例子
  2. 同时开始迭代您的文件。时间戳应该可以同步,尽管我遇到了数据包在写入时丢失或损坏的问题,这将搞砸合并
  3. 我解码媒体并在此处重新编码,以便我可以静态设置视频的帧速率和大小。我确信有一种方法可以做到这一点,而无需对媒体进行转码。
  4. 多路复用并写入文件

我执行步骤 1 与 janus 后处理器完全一样。第 2 步我将每个 rtp 数据包从文件推送到 gstreamer appsrc 元素。步骤 3 和 4 在 gstreamer 管道中完成。

于 2015-08-08T21:12:40.973 回答