转码器功能是把视频和音频资源转成适合客户端预览的m3u8格式的视频文件。其中的接口是用来被可执行程序调用更新进度和结果的。

# 转码器支持的视频格式: MP4、MOV、WMV、M2V、MPG

# 转码器支持的音频格式: MP3、FLAC、AAC、M4A

# 安装转码器运行环境

假设当前系统是ubuntu 18.04.

  1. 更新linux安装程序源
apt update;
apt upgrade;
apt install default-jre
  1. 安装QT和ffmpeg相关库
apt-get install qt5-default
apt install libavutil55
apt install libavcodec57
apt install libavformat57
apt install libswresample2
apt install libswscale4
apt install libqt5multimedia5
apt install libqt5multimedia5-plugins
  1. 安装转码器 将转码器 (opens new window) 放到运行目录(例:/opt/bsedit)下。

# 转码器参数说明

命令行下运行转码器,可以看到如下输出。

image.png

名称 描述
-h, --help 显示帮助文档
-v, --version 显示版本号
-o <output> 指定输出文件路径, 如果路径以mp4结尾,则转成视频,如果路径以m4a结尾,则转成音频
--slice-duration <duration> 转码分片的时长,单位毫秒,如果设置<=0,则不分片
--video-size <size> 指定输出视频的短边长度
--crf <crf> 指定输出视频的crf参数
--fps <fps> 指定输出视频的fps参数
--gop-size <gop size> 指定输出视频的gop参数
--video-decoding-threads <thread count> 指定解码线程数量
--video-encoding-threads <thread count> 指定编码线程数量
--sample-rate <sample rate> 指定输出音频的采样率
--channel-count <channel count> 指定输出音频的通道数量
--audio-bitrate <bitrate> 指定输出音频的码率
--generate-thumbnails 指定是否输出缩率图
--thumbnail-size <size> 指定输出缩率图的短边长度
--thumbnail-interval <interval> 指定输出缩率图的时间间隔
--generate-cover 指定是否输出封面
--cover-size <size> 指定输出封面的短边长度
--cover-timestamp <timestamp> 指定输出封面对应的视频的时码
--host <host> 指定输出m3u8文件的网络host地址
--asset-uuid <uuid> 指定输出m3u8文件的分片的uuid名称
--callback-url <url> 指定转码器的回调接口地址
--task-id <id> 指定转码任务ID
--generate-waveform 指定是否输出音频波形图
--waveform-groups-per-second <groups per second> 指定每秒波形取样数
--generate-alpha-channel 指定是否转带通道的视频
--only-generate-waveform 指定是否只输出波形图
--only-generate-thumbnails 只生成缩略图
--generate-audio-data 生成音频数据
--only-generate-audio-data 只生成音频数据
--start-time <start-time> 转码裁剪入点
--end-time <end-time> 转码裁剪出点
source 待转码的视频或音频本地地址或网络地址
--multiple-audio-streams 指定是否输出多轨音频

# 示例

视频文件转码成视频分片示例

./NvTranscoder \
    -o output.mp4 \
    --slice-duration 5000 \
    --video-size 480 \
    --crf 27 \
    --fps 25 \
    --gop-size 25 \
    --sample-rate 44100 \
    --channel-count 2 \
    --audio-bitrate 64000 \
    --generate-thumbnails \
    --thumbnail-size 128 \
    --thumbnail-interval 1000 \
    --generate-cover \
    --cover-size 256 \
    --cover-timestamp 0 \
    --host http://localhost \
    --asset-uuid uuid \
    --callback-url http://localhost \
    --task-id 1 \
    --generate-waveform \
    --waveform-groups-per-second 150 \
    https://bsedit-1257467088.cos.ap-beijing.myqcloud.com/test/wudao.mp4

视频文件转码成音频频分片示例

./NvTranscoder \
    -o output.m4a \
    --slice-duration 30000 \
    --video-size 480 \
    --crf 27 \
    --fps 25 \
    --gop-size 25 \
    --sample-rate 44100 \
    --channel-count 2 \
    --audio-bitrate 64000 \
    --generate-thumbnails \
    --thumbnail-size 128 \
    --thumbnail-interval 1000 \
    --generate-cover \
    --cover-size 256 \
    --cover-timestamp 0 \
    --host http://localhost \
    --asset-uuid uuid \
    --callback-url http://localhost \
    --task-id 1 \
    --generate-waveform \
    --waveform-groups-per-second 150 \
    https://bsedit-1257467088.cos.ap-beijing.myqcloud.com/test/wudao.mp4

# 程序退出码

接口根据程序退出码来判断是否转码成功。

转码器退出码 是否成功
0
非零

# Docker方式运行转码器

如果Linux系统的libc库版本低于2.27, 应该使用Docker方式运行转码器。

# 安装Docker

参考 Docker官网 (opens new window)

# 拉取云剪镜像

docker pull shanwuzhongjian/meishesdk-bsedit:1.0.1

# 运行容器

docker run -itd <imageId>

# 测试转码

docker exec -w /opt/bsedit <containerId> \
    ./NvTranscoder \
     -o output.m4a \
     --slice-duration 30000 \
     --video-size 480 \
     --crf 27 \
     --fps 25 \
     --gop-size 25 \
     --sample-rate 44100 \
     --channel-count 2 \
     --audio-bitrate 64000 \
     --generate-thumbnails \
     --thumbnail-size 128 \
     --thumbnail-interval 1000 \
     --generate-cover \
     --cover-size 256 \
     --cover-timestamp 0 \
     --host http://localhost \
     --asset-uuid uuid \
     --callback-url http://localhost \
     --task-id 1 \
     --generate-waveform \
     --waveform-groups-per-second 150 \
     https://bsedit-1257467088.cos.ap-beijing.myqcloud.com/test/wudao.mp4

转码后生成的切片在容器的/opt/bsedit 目录下

# 接收转码回调的示例

下载示例demo-0.0.1-SNAPSHOT.jar (opens new window), 创建配置文件application.properties

server.port             = 8080
trancoderContainerId    = 8405c24f7354          // 容器ID
outputFileUuid          = outfile-uuid

运行jar包

java -jar demo-0.0.1-SNAPSHOT.jar --spring.config.location=./application.properties &

进入容器,并修改容器内nginx服务器配置文件(/etc/nginx/sites-available/default)后重启nginx

    // 注释掉默认的配置
    #location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # try_files $uri $uri/ =404;
    #}

    // 改成以下配置
    location / {
        proxy_pass http://<宿主机内网IP>:8080;
    }

调用接口,启动转码

curl http://localhost:8080/startTranscoder

进入到容器里面的/opt/bsedit, 查看转码的结果