如何在srs的两个实例间传递数据

hls切片器用了两个srs实例,一个是live-srs,一个是hls-srs。
live实例负责接受推流,而hls实例则负责切片。这种框架会带来很大的灵活性。
在两个情况下,需要这两个srs进程间通信。
情况1:由外部传入session_id来动态决定hls的录像路径,也就是ts切片文件存放的子目录。
情况2:把流名称stream替换为另外一个随机数如uuid,从而隐藏原始的推流地址信息。
涉及进程间通信,用redis缓存来传递数据是比较合适的选择,不需要做持久化。
由于复制了2个子流,加上原始流,一共三个流,因此,live-srs在redis中一次性入三个k:v键值对。
{"stream":"session_id"},{"stream-sd":"session_id"},{"stream-lw":"session_id"}
hls-srs实例在生成hlspath时,利用自己的获得的stream作为key直接从redis中取出value即session_id.
这里不使用app,因为看起来没有必要用到它,只使用stream就行了。
对于修改stream名称的情况,这也需要在Redis中存入键值对。假设原来stream修改为new_stream。
则键值对为:{"new_stream":"stream"},{"new_stream-sd":"stream"},{"new_stream-lw":"stream"}
hls-srs实例用new_stream获得stream,再由stream获得session_id。
这有点点啰嗦。直接在生成new_stream时,再生成三组k:v存入redis。
{"new_stream":"session_id"},{"new_stream-sd":"session_id"},{"new_stream-lw":"session_id"}
这样就比较方便了,hls-srs实例不管是收到旧名称还是新名称,都可以顺利找到session_id。
如何知道现在流的new_stream呢?
live-srs写入redis中:
        stream_url="dst-" + req->stream;
        redis_setex(stream_url.c_str(), req->dst_stream.c_str(),36000);
hls-srs读出来就可以了。
修改名称会带来两个问题:
1. m3u8无法接续产生,不能继续前面的ts切片了,因为文件名都变了。
2. 转码流会造成困扰,内部的拉流不知道是从local_pool去取source还是pool去取source。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

草根大哥

进军大神程序员路上,谢谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值