转换录制文件格式
完成云端录制后,你可以根据场景需要,使用声网提供的转码脚本或其他方法对录制生成文件进行处理。本文将介绍如何在不同录制模式下进行文件格式转换,以获取所需的音视频文件。
前提条件
环境准备
转码服务器推荐使用以下系统:
- Ubuntu 14.04+ x64
- CentOS 7.0+ x64
- Debian 8.0 +
- Python 2、2.7 及以上版本(除 Python 3)
录制文件准备
- 确保你已经使用声网云端录制 RESTful API 在单流录制模式下生成录制文件。任何一个录制文件的缺失都将导致转码失败。
- 确保生成的录制文件的存储路径可访问。
转换单流录制文件
单流录制模式下,每个 UID 的音频和视频均分开录制,每个 UID 都有其对应的音频文件和视频文件。录制结束后,你可以使用声网音视频格式转换脚本,合并每个 UID 的音频文件和视频文件。
获取转换脚本
下载声网音视频格式转换脚本压缩包并解压。脚本中内置了 FFmpeg,建议使用压缩包内的 FFmpeg 进行转码,避免出现兼容性问题。
快速试用示例
假设频道内有两个用户,UID 分别为 100
和 123
。以单流模式开始云端录制。用户 100
曾离开频道,30 秒后再进入。因此得到的录制文件中,用户 100
有两个录制 Segment,对应两个音频文件和两个视频文件,用户 123
对应一个音频文件和一个视频文件。
你希望将这些位于 /path/to/recordings
目录下的录制文件按照不同的模式进行合并和转码,需要设置以下参数后运行脚本:
-
将每个 UID 的音视频合并成一个文件,可运行以下命令:
Shellpython convert.py -f /path/to/recordings -m 1 -s -p 30 -r 640 360
其中,不同参数的含义如下:
-f /path/to/recordings
:指定待转码文件的绝对存储路径。-m 1
:设置转码格式为音视频合并模式1
,即将每个 UID 的音视频合并成一个文件。-s
:设置保存模式为录制文件只包含用户实际在频道中的时间段,用户离开频道的时间不会占转码文件时长。-p 30
:设置转码后视频帧率为 30 fps。-r 640 360
:设置转码后视频分辨率为 640 x 360。
最终会生成两个转码文件:
100_0_merge_av.mp4
和123_0_merge_av.mp4
。 -
将每个 UID 的音视频按照录制 Segment 合并成一个文件,可运行以下命令:
Shellpython convert.py -f /path/to/recordings -m 0 -p 30 -r 640 360
其中,
-m 0
参数的含义为选择默认转码模式0
,即把同一个 Segment 的音频和视频合成一个音视频文件。最终会生成三个转码文件:
100_timestamp1_av.mp4
,100_timestamp2_av.mp4
,和123_timestamp1_av.mp4
。
转码完成后,会生成一个 convert-done.txt
文件,标志转码成功;还会生成一个 convert.log
日志文件,这些文件会与音视频文件在同一个目录下。
转码脚本参数介绍
你可以在命令行界面中输入 python convert.py
,查看转码脚本的参数介绍,如下图所示。
有关各参数的解释如下表所示。
参数 | 描述 | 是否必填 |
---|---|---|
-f | 指定待转码文件的绝对存储路径。如该路径中有多次录制产生的录制文件,声网音视频格式转换脚本会对所有的录制文件依次进行转码。 | 是 |
-m | 设置转码模式:
注意 如果转码模式为 | 否 |
-s | 设置保存模式,决定转码时是否保留用户离开频道的时间:
举例来说,用户在频道里 2 分钟后,退出频道 30 分钟,再加入频道 2 分钟,如不设置 信息 仅当 | 否 |
-p | 设置转码后视频的帧率,单位为 fps。默认值为 15 fps。取值范围为 [5,120]。如果设置低于 5 fps,则按 5 fps 执行。具体设置请参考分辨率、帧率、码率对照表。 | 否 |
-r | 设置转码后视频的分辨率,格式为 {宽} + 空格 + {高} ,如 -r 640 360 ,默认将选择所有切片中最大切片的分辨率。具体设置请参考分辨率、帧率、码率对照表。 | 否 |
-a | 转码音视频的同时输出用户的纯音频文件,输出文件名格式为:UID_timestamp.m4a 。 | 否 |
-c | 设置截图的间隔,单位:毫秒,用于指定截图间隔。输出文件名格式:UID_timestamp_index.jpg 。 | 否 |
-u | 指定需要转码的用户 uid,如果不指定,则将文件夹内所有 UID 的录制文件进行转码。 | 否 |
-b | 设置转码开始时间,单位:秒,支持浮点数。例如 -b 10.500 ,表示从 10 秒 500 毫秒开始。 | 否 |
-t | 设置截取录制文件的时长。需配合 同时设置 | 否 |
-o | 指定输出文件名,仅 -u 有效时输出指定文件名,不指定则输出默认的文件名。 | 否 |
-e | 将录制的 ts 文件转码为标准格式的 ts 文件,并输出同名的 MP4/M4A 文件。 | 否 |
转换合流或页面录制文件
合流或页面录制模式下,你会得到一个 M3U8 文件和多个 TS 文件,包含所有用户的音视频数据。你可以从如下两种方案中选择一种进行文件格式转换,获取 MP3 或 MP4 文件。
通过 avFileType 字段转换
合流和页面录制模式下,你可以通过设置 avFileType
字段直接获得 MP4 文件,无需通过转码脚本进行格式转换。
使用 FFmpeg 转换
你还可以使用 FFmpeg 将 M3U8 文件转换为 MP4 文件。安装 FFmpeg,并执行以下命令:
ffmpeg -i input.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4
其中,input.m3u8
是待转换的 M3U8 文件名,output.mp4
为转换后的 MP4 文件名。
参考信息
播放器支持
转码完成后的 MP4 文件几乎支持所有主流播放器,详见下表:
操作系统 | 支持播放器 |
---|---|
Linux | VLCffplayer |
Windows |
|
macOS |
|
iOS |
|
Android |
|
录制 Segment 定义
录制 Segment 指每个 UID 从开始录制到结束录制的过程。
一个 UID 开始录制需同时满足以下两个条件:
- 该 UID 加入频道并发流
- 开始云端录制
一个 UID 结束录制只需满足以下任一条件:
- 该 UID 停止发流且 15 秒内没有重新发流
- 该 UID 离开频道且 15 秒内没有重新加入
- 结束云端录制
timestamp 字段介绍
timestamp
为服务器开始录制的时间,如音频和视频的开始时间不一致,timestamp
为两个开始时间中较早的时间。timestamp
的时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如 100_20190611073246073_av.mp4
表示在 UTC 2019 年 6 月 11 日 7 点 32 分 46 秒 73 毫秒时开始录制的一个 UID 为 100
的用户的音视频文件。