您可以把用户 exe 或其他窗体的屏幕录制下来,然后作为视频文件用于回看。支持本地录制及云端录制mp4文件。适用于记录在线定损、互动课堂、远程庭审等场景。
本地录制无需开通任何服务即可满足您的需求。而云端录制回看功能则依托于腾讯云的点播服务支撑,如果您想要对接这个功能,首先需要在腾讯云的管理控制台开通点播服务。服务开通之后,新录制的文件就可以在点播控制台的 视频管理 里找到它们。
那么怎么开启屏幕录制呢?您可以在配置工程后,用几个简单的接口使用我们的录制小工具:
点击 GitHub 下载 TXCloudRecord 源代码,将 RecordSDK 放置于您的代码目录中,如下图:
1)在您的附加包含目录中添加如下字段:
$(ProjectDir)RecordSDK\TXCloudRecord\include
$(ProjectDir)RecordSDK\jsoncpp
如下图:
2)在工程文件中添加如下内容:
3)将RecordSDK\dll中的文件拷贝到您的 exe 运行目录下,如图:
这里有几点要特别说明:
- 目前录制功能默认使用的视频封装格式为 mp4(播放、下载及传输比较方便),暂时不支持中途分辨率改变的场景。
- 云端录制mp4 文件默认分片时长为2小时,只要中途不断流,2小时内的直播内容都将录制在同一个 mp4 文件中。若中途停止推流,以实际推流时长为准。
- 本地录制mp4文件可以设置分片时间,建议录制时间设置为5~60分钟,需要调用停止或者退出接口才能看到完整的视频。
成员函数 | 功能说明 |
---|---|
runAndRecord | 启动录屏 exe 并开始录制 |
update | 更新录制参数继续进行录屏 |
start | 继续进行录屏 |
stop | 暂时停止录屏 |
exit | 退出录屏 exe 并结束录屏 |
- 接口定义:bool runAndRecord(RecordData recordData)
- 接口说明:启动录屏 exe 并开始录制
- 参数说明:
struct RecordData{
ScreenRecordType recordType; 录屏方式。支持录制到本地/云端/同时录制到本地及云端
char recordUrl[512]; 推流地址
char recordPath[512];
char recordExe[64]; 需要录制的exe名称
int sliceTime; 本地录制mp4文件分片时长
int winID; 需要录制的窗口句柄
};
-
注意事项:
1)recordUrl 为推流地址,可查阅 doc 里进行获取。
2)recordExe 及 winID 只需要传入一个参数即可,若recordExe 不为空,则默认录屏 recordExe 指代的 exe 屏幕
-
返回值说明:启动是否成功
-
示例代码:
RecordData recordData;
strcpy_s(recordData.recordExe, "xxx"); //待录制应用程序名称 例如chrome.exe
strcpy_s(recordData.recordUrl, "xxx"); //需要改为推流地址
strcpy_s(recordData.recordPath, "F:\\"); //保存路径,若没有以mp4结尾,会自动保存为路径+yyyy_mm_dd_hh_mm_ss.mp4格式
recordData.recordType = RecordScreenToBoth;
recordData.sliceTime = 60; //本地文件分片时长,以分钟为单位
recordData.winID = -1; //待录制窗口句柄
TXCloudRecordCmd::instance().runAndRecord(recordData);
-
接口定义:void update(RecordData recordData)
-
接口说明:可更新参数后继续录屏
-
示例代码:
recordData.recordType = RecordScreenToClient;
TXCloudRecordCmd::instance().update(recordData);
-
接口定义:void start()
-
接口说明:继续进行录屏
-
示例代码:
TXCloudRecordCmd::instance().start();
-
接口定义:void stop()
-
接口说明:暂时停止录屏
-
示例代码:
TXCloudRecordCmd::instance().stop();
-
接口定义:void exit()
-
接口说明:退出录屏 exe 并结束录屏
-
示例代码:
TXCloudRecordCmd::instance().exit();
一个新的录制视频文件生成后,会相应的生成一个观看地址,您可以结合自己的业务场景实现很多的扩展功能,比如:您可以将其追加到历史信息里,作为资料进行存档;或者将其放入回放列表中,经过专门的人工筛选,将优质的视频推荐给您的 App 用户。
那么怎样才能拿到文件的地址呢?有如下三种解决方案:
您可以使用腾讯云的事件通知服务:您的服务器注册一个自己的回调URL给腾讯云,腾讯云会在一个新的录制文件生成时通过这个URL通知给您。
如下是一个典型的通知消息,它的含义是:一个id为9192487266581821586的新的flv录制文件已经生成,播放地址为:http://200025724.vod.myqcloud.com/200025724_ac92b781a22c4a3e937c9e61c2624af7.f0.flv
。
{
"channel_id": "2121_15919131751",
"end_time": 1473125627,
"event_type": 100,
"file_format": "flv",
"file_id": "9192487266581821586",
"file_size": 9749353,
"sign": "fef79a097458ed80b5f5574cbc13e1fd",
"start_time": 1473135647,
"stream_id": "2121_15919131751",
"t": 1473126233,
"video_id": "200025724_ac92b781a22c4a3e937c9e61c2624af7",
"video_url": "http://200025724.vod.myqcloud.com/200025724_ac92b781a22c4a3e937c9e61c2624af7.f0.flv"
}
注意:来自 APP 客户端的时间信息很重要,如果您希望定义这段时间内的录制文件都属于同一次直播,那么只需要用直播码和时间信息检索收到的录制通知即可(每一条录制通知事件都会携带stream_id、start_time 和 end_time 等信息)。
您可以通过腾讯云的文件查询接口(Live_Tape_GetFilelist)定时地查看是否有新的录制文件生成,不过这种方案在要查询的频道数特别多的时候,响应速度不理想,同时调用频率也不能太快(仅对刚结束的频道进行调用为宜),这种方案的实时性和可靠性不高,并不推荐频繁使用。
在点播控制台的 视频管理 里可以查询到所有的录制视频,适用于后续检索文件内容。可根据前缀搜索查询指定视频,如下图:
选择视频列表中对应文件后,可以在右侧看到具体视频内容,切换 tab 页至视频发布,点击选择显示源地址,即可得到文件地址。如下图:
对于一条直播流,一旦开启录制,音视频数据就会被旁路到录制系统。主播的手机推上来的每一帧数据,都会被录制系统追加写入到录制文件中。
一旦直播流断中断,接入层会 立刻 通知录制服务器将正在写入的文件落地,将其转存到点播系统中,并为其生成索引,这样您在点播系统中就会看到这个新生成的录制文件了。同时,如果您配置了录制事件通知,录制系统会将该文件的 索引ID 和 在线播放地址 等信息通知给您之前配置的服务器上。
- 如果一次直播过程非常短暂,比如只有不到 1 秒钟时间,那么可能是没有录制文件的。
- 如果一次直播时间不算长——小于7天(hls 格式)或者小于 mp4、flv 格式的分片时长,且中途没有推流中断的事情发生,那么通常只有一个文件。
- 如果一次直播时间很长——超过7天(hls 格式)或者超过 mp4、flv 格式的分片时长,那么会强制进行分片,分片的原因是避免过长的文件在分布式系统中流转的时间不确定性。
- 如果一次直播过程中发生推流中断(之后 SDK 会尝试重新推流),那么每次中断均会产生一个新的分片。
目前腾讯云支持使用云端 API 接口拼接视频分片,API 详细用法可以参考 视频拼接 。