Janus videoroom 视频录制

摘要

本文主要描述Janus的videoroom模块录制视频功能,并将webrtc的数据包转换成可以播放的视频文件

打开录制功能

可以配置文件etc/janus/janus.plugin.videoroom.jcfg中修改配置打开录制功能,如果通过API创建或修改的房间,可以通过相同的属性名参数进行配置。

    record = true | false(该房间是否启录制?默认= false)
    record_dir = <启用录制后,录制文件存放的目录>
    lock_record = true | false(是否锁定录制状态? 默认= false)

录制后处理

经过以上配置后再次视频时产生的录制文件会存放在指定目录,但是生成的文件仅仅是Janus通过自定义格式收集的RTP媒体流,需要通过转换后才可以在其他播放器中播放。转换需要两个工具,一个janus自带的janus-pp-rec将RTP中的媒体桢提取出来,然后使用FFmpeg将音频和视频文件进行合并成一个可播放的视频文件。

安装ffmpeg

安装janus-pp-rec需要依赖FFmpeg,所以首先安装FFmpeg

  • 安装EPEL yum源
sudo yum install epel-release
  • 安装RPM Fusion(这也是FFmpeg官网文档中给出的安装方式)
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
  • 安装ffmpeg ffmpeg-devel
sudo yum install ffmpeg ffmpeg-devel
  • 查看版本 3.4.8
ffmpeg -version

重新配置编译janus

Janus中打开post-processing

./configure --prefix=/opt/janus --enable-rest --enable-websocket --disable-docs --enable-post-processing
make && make install

将RTP临时文件转为音视频文件

cd /opt/janus/bin
./janus-pp-rec /tmp/janus/videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-audio.mjr /tmp/janus/videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-audio.opus
./janus-pp-rec /tmp/janus/videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-video.mjr /tmp/janus/videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-video.webm

合成单个文件

# 切换到录制文件目录
cd /tmp/janus
# 合成视频
ffmpeg -i videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-audio.opus -i videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636-video.webm \
  -c:v copy -c:a opus -strict experimental videoroom-111111-user-cd8de852-cf16-4a8f-8cc9-f7c36581ac70-1627553582760636.webm

常见问题

  • error: implicit declaration of function ‘av_packet_alloc’ [-Werror=implicit-function-declaration]
  • error: implicit declaration of function ‘av_packet_free’ [-Werror=implicit-function-declaration]

因为FFmpeg版本太低,部分函数不支持导致,升级FFmpeg可解决此问题

  • error: ‘for’ loop initial declarations are only allowed in C99 mode

post-processing需要C99标准编译,由于修改-std=C99太麻烦(我没没学会…),这里升级C++版本也可以

# 安装centos-release-scl
sudo yum install centos-release-scl
# 安装devtoolset,安装c++ 8.* 版本 devtoolset-8 ,数字8代表的大版本
sudo yum install devtoolset-8-gcc*
# 切换devtoolset-8版本,如果安装了多个devtoolset,可以使用scl命令切换版本
scl enable devtoolset-8 bash
# 查看版本
gcc -v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值