前言
这篇文章主要介绍了Ubuntu16.04下如何使用JSVM来实现可伸缩视频编码。主要参考了https://github.com/ChristianKreuzberger/DASH-SVC-Toolchain和https://blog.youkuaiyun.com/qq_41895113/article/details/80561218
一、JSVM安装和测试
1.安装
JSVM并不是和所有Ubuntu版本都兼容,我之前下载了好几个版本的JSVM都没成功,最后下载这个版本(https://github.com/floriandejonckheere/jsvm)的JSVM在Ubuntu 16.04上终于安装成功了,安装步骤也比较简单。将下载的JSVM压缩包解压,在文件夹jsvm/JSVM/H264Extension/build/linux下直接make就安装成功了。
cd /home/songfeng1256/Desktop/SVCDemo/jsvm/JSVM/H264Extension/build/linux
make
为了能够在其他路径下调用JSVM提供的编解码器,将可执行文件添加到PATH路径中。在root权限下打开配置文件。
#切换到root权限
sudo su
#打开配置文件
gedit ~/.bashrc
#在最后一行添上:
export PATH=/home/songfeng1256/Desktop/SVCDemo/jsvm/bin:$PATH
#生效方法:(有以下两种)
#1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
#2、输入“source ~/.bashrc”命令,立即生效
#有效期限:永久有效
#用户局限:仅对当前用户
2.测试
任意位置打开终端输入
H264AVCDecoderLibTestStatic
出现下图所示即成功安装JSVM,并成功配置路径
二、编码和解码
1.编码-质量伸缩性
参考http://concert.itec.aau.at/SVCDataset/这里面提供的四种编码方式,分别给出了配置文件。
本文选择的是第一种编码方式,通过改变量化步长来改变质量,进而实现可伸缩视频编码。首先新建一个测试文件夹,e.g SVCDemo,在文件夹内新建配置文件,由于本文选择的是360p的视频,配置文件参考http://ftp.itec.aau.at/datasets/SVCDASHDataset2015/config/I/JSVM/360p/。其中一共有四个配置文件。对于输出配置文件,设置如下,其中NumLayers决定需要编码的层数,LayerCfg为各个层的配置文件。
下面为别为一层、两层和三层的配置文件。
#只有一个增强层
# JSVM Main Configuration File for Sintel Spatial
OutputFile output_360p.264 # Bitstream file
FrameRate 24.0 # Maximum frame rate [Hz]
FramesToBeEncoded 300 # Number of frames
BaseLayerMode 2
IntraPeriod 48 # Intra Period
GOPSize 4 # GOP Size (at maximum frame rate)
SearchMode 4
SearchRange 32
FastBiSearch 1
NumLayers 1