SkeyeRMS录像服务器如何实现精确查找: HLS+M3U8录像回放

SkeyeRMS作为面向云端的录播服务器,目前正处于开发阶段,以往的SkeyeRMS查找通常只能精确到M3U8列表,而不能实现精确到时间点的查询,为了能实现精确到点的查询,我将M3U8列表从新遍历一遍,重新生成一个精确到在关键位置开始和结束的切片文件(ts)的M3U8列表,然后返回,我们先不讨论这个方法效率如何,但是确实可以将精确度提高到切片文件单位级。

精确查找流程如下:

  1. 遍历本地(数据库)指定录像存储路径,找出在指定开始时间和结束时间范围内的M3U8列表,注意:这里找到的M3U8列表的区间是要小于开始时间,和大于结束时间的最接近值,以确保指定时间范围在查找到的M3U8列表队列中;

  2. 再在指定的M3U8列表里面查找在开始时间和结束时间内的TS,并重新生成TS列表,如果时间戳连续,甚至可以将TS文件连接成一个M3U8列表,从而播放器播放可以不用跨M3U8列表直接播放;

实现代码如下:(基于本地查找)

bool SkeyeRecordQuery::GetExactM3U8(const char *beginDif, const char *endDif, vector<string> *records)
{
	namespace fs = boost::filesystem;
	fs::path fullpath = fs::path(SkeyeRecordSession::sLocalRecordPath) / name_;

	if (!fs::exists(fullpath))
	{
		return false;
	}

	string begin = beginDif;
	string end = endDif;
	// 通过时间戳和开始结束时间差计算开始时间和结束时间 [12/30/2016 dingshuai]
	//时间戳字串转换成 
	time_t nBegin = StringToTime(begin);
	time_t nEnd	 = StringToTime(end);

	// 算法描述:获取包含begin-end录像开始的时间命名文件夹以及录像结束的时间命名文件夹 [12/30/2016 dingshuai]
	vector<string>* m3u8List = new vector<string>;

	string sStartURL;
	char split = '/';
#ifdef _WIN32
	split = '\\';
#endif

	fs::recursive_directory_iterator end_iter;
	for (fs::recursive_directory_iterator iter(fullpath); iter != end_iter; iter++)
	{
		try
		{			//cout << iter->path().string() << endl;
			if (!fs::is_directory(*iter))
			{
				string file
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HLS(HTTP Live Streaming)是苹果公司提出的一种流媒体传输协议,而M3U8则是HLS流媒体的播放列表文件格式。在HLS中,媒体数据被分段传输,并通过M3U8文件来描述这些媒体段的详细信息。M3U8文件中包含了媒体段的URL地址,可以从服务器获取这些媒体段进行播放。 Sample-AES(Sample-based AES encryption)是HLS中对媒体段进行加密的一种方式。它使用AES(Advanced Encryption Standard)算法对每个媒体段进行加密,然后在M3U8文件中使用URI方式引用加密的密钥。这样,只有具有正确密钥的用户才能解密和播放这些加密的媒体段。 要实现HLS/M3U8的Sample-AES解密及软件开发,需要考虑以下几个步骤: 1. 解析M3U8文件:通过解析M3U8文件,获取媒体段的URL地址和加密键信息。可以使用Python等编程语言来实现M3U8文件的解析。 2. 下载媒体段:根据M3U8文件中的URL地址,从服务器上下载加密的媒体段。可以使用HTTP请求库(如requests库)来发送HTTP请求并下载媒体段。 3. 获取密钥:从M3U8文件中的加密键信息中获取加密用的密钥。密钥通常以URI的形式给出,可以根据URI的规则找到对应的密钥。 4. 解密媒体段:使用AES算法和获取的密钥对下载的媒体段进行解密。可以使用AES加密库来实现解密算法。 5. 播放媒体:将解密后的媒体段进行播放。可以使用FFmpeg等多媒体处理库来实现播放功能。 总之,实现HLS/M3U8的Sample-AES解密及软件开发,涉及到M3U8文件的解析、媒体段的下载、密钥的获取、媒体的解密和播放等步骤。通过合理选择编程语言和相关库,可以实现这一功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwordTwelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值