转码器功能是把视频和音频资源转成适合客户端预览的m3u8格式的视频文件。其中的接口是用来被可执行程序调用更新进度和结果的。
# 转码器支持的视频格式: MP4、MOV、WMV、M2V、MPG
# 转码器支持的音频格式: MP3、FLAC、AAC、M4A
# 安装转码器运行环境
假设当前系统是ubuntu 18.04.
- 更新linux安装程序源
apt update;
apt upgrade;
apt install default-jre
- 安装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
- 安装转码器 将转码器 (opens new window) 放到运行目录(例:/opt/bsedit)下。
# 转码器参数说明
命令行下运行转码器,可以看到如下输出。
名称 | 描述 |
---|---|
-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, 查看转码的结果