Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[增强] 国标录像回放使用的 streamId 格式区分多个客户端同时播放同一个录像同样时间的场景 #1297

Open
shuxiaoyuan opened this issue Jan 31, 2024 · 12 comments

Comments

@shuxiaoyuan
Copy link

shuxiaoyuan commented Jan 31, 2024

环境信息:

    1. 部署方式 wvp-pro docker / zlm(docker)
    1. 部署环境 ubuntu
    1. 端口开放情况 没有限制
    1. 是否是公网部署 否
    1. 是否使用https 否
    1. 方便的话提供下使用的设备品牌或平台 海康摄像头
    1. 你做过哪些尝试
    1. 代码更新时间 2024/1/31 at 11:07

描述错误
目前国标录像的 streamId 使用的格式为:deviceId_channelId_startTime_endTime
导致同一个国标录像只能在一个浏览器标签页发起点播,再开启新的标签页点播时会失败。
即使拿到第一次点播返回的播放地址,复制其他播放器播放,但由于 streamId 相同,因此只要一个播放器发起控制指令(暂停、停止、倍速等),所有播放器的画面都会受到影响。

作者能否支持这种多播放器播放同一国标录像时,能各自单独控制自己回放流的场景呢。

如何复现

截图
对同一国标录像发起第二次点播时会失败,分配的zlm端口也相同。
image

抓包文件

日志

@648540858
Copy link
Owner

不可能的,每个通道相当于一个设备的身份ID,你不可能让他同时做不同的动作而不影响其他观看者。

@shuxiaoyuan
Copy link
Author

shuxiaoyuan commented Feb 19, 2024

不可能的,每个通道相当于一个设备的身份ID,你不可能让他同时做不同的动作而不影响其他观看者。

你好,如果是直播流我可以理解,但是录像回放不是对已经录制好的视频文件转推流吗?为什么不能各自单独播放和控制呢?

@648540858
Copy link
Owner

你说的有道理,理论上可以的,你测试下用两个不同的电脑打开同一个通道的不同时间的录像测试下

@648540858 648540858 reopened this Feb 19, 2024
@shuxiaoyuan
Copy link
Author

你说的有道理,理论上可以的,你测试下用两个不同的电脑打开同一个通道的不同时间的录像测试下

刚刚测试播放同一个通道的不同时间的录像是可以的。但是播放同一个通道的相同时间的录像不行,第二次发起点播的页面播放不了。
我看直播流点播的时如果发现点播已存在会直接返回,但是录像回放会重复发起点播。

@648540858
Copy link
Owner

648540858 commented Feb 19, 2024 via email

@shuxiaoyuan
Copy link
Author

同一个时间点的流地址重复了,我无法判断你要控制哪一个,另外同一个流地址在zlm中只能存在一个

---原始邮件--- 发件人: @.> 发送时间: 2024年2月19日(周一) 中午11:12 收件人: @.>; 抄送: @.>;"State @.>; 主题: Re: [648540858/wvp-GB28181-pro] BUG 国标录像回放使用的 streamId 格式不能区分多个客户端同时播放同一个录像的场景 (Issue #1297) 你说的有道理,理论上可以的,你测试下用两个不同的电脑打开同一个通道的不同时间的录像测试下 刚刚测试播放同一个通道的不同时间的录像是可以的。但是播放同一个通道的相同时间的录像不行,第二次发起点播的页面播放不了。 我看直播流点播的时如果发现点播已存在会直接返回,但是录像回放会重复发起点播。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you modified the open/close state.Message ID: @.***>

嗯嗯明白。所以如果要支持多客户端播放相同录像,是不是可以这样解决:一是像直播流那样发现点播已存在直接返回,但这样就会导致某个播放器下发了录像控制命令会影响所有播放器;二是可以通过对录像回放的 streamId 的格式增加一个播放器的唯一标识,用来区分不同播放器呢

@648540858
Copy link
Owner

目前deviceId_channelId_startTime_endTime 其实就是一个唯一标识呀,如果一样了那就是同一个流呀

@shuxiaoyuan
Copy link
Author

目前deviceId_channelId_startTime_endTime 其实就是一个唯一标识呀,如果一样了那就是同一个流呀

你好,我可能没描述清楚。我的意思是,如果把 streamId 改成:deviceId_channelId_startTime_endTime_playerId 这种格式,其中 playerId 为播放器 id,这样即使同一个录像也会给每个播放器都创建一个唯一的流,是不是就可以解决不同播放器播放同一录像时,不能独立控制录像暂停跳转等指令的问题了呢?

@648540858
Copy link
Owner

那么结果就是每次点播都是一个新的流了,也就不能复用了,现在如果是通一个时间是可以直接返回流地址播放的,很多设备有播放路数限制的,开启太多会导致满负载播放不出来的。

@648540858 648540858 changed the title BUG 国标录像回放使用的 streamId 格式不能区分多个客户端同时播放同一个录像的场景 [增强] 国标录像回放使用的 streamId 格式区分多个客户端同时播放同一个录像同样时间的场景 Feb 20, 2024
@shuxiaoyuan
Copy link
Author

那么结果就是每次点播都是一个新的流了,也就不能复用了,现在如果是通一个时间是可以直接返回流地址播放的,很多设备有播放路数限制的,开启太多会导致满负载播放不出来的。

确实,我测了下自己的摄像头,同一个通道的不同时间的录像只能同时播放两个,再点播新的录像就会收流超时了。
不过是不是可以把【国标录像流是否多路复用】作为device的一个属性,默认开启,由用户自己决定是否关闭呢。这样如果某个设备性能比较强大,可以支持很多路录像同时播放,那用户可以把这个属性关闭,用来实现录像独立播放和控制。

@648540858
Copy link
Owner

这个可以考虑,刚才我就在考虑这个事,可能考虑增加一个数字字段,标识支持的录像回放路数,超过限制可以配置自动结束旧的或者失败。这样也更容易在成功率和易用性上平衡下。

@shuxiaoyuan
Copy link
Author

这个可以考虑,刚才我就在考虑这个事,可能考虑增加一个数字字段,标识支持的录像回放路数,超过限制可以配置自动结束旧的或者失败。这样也更容易在成功率和易用性上平衡下。

这个方案确实比一个属性控制开关的方式更合理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants