您现在的位置:首页 > 文档 > 拉流
1、如果你要从Ti Top Streamer 拉流,那么你需要知道拉流url是什么样的格式。
Ti Top Streamer 目前支持rtmp、hls、http-flv 三种拉流协议。下面是它们的拉流url格式:
协议 | 拉流url格式 |
rtmp | rtmp://[hostAddress]:[rtmpPort]/[applicationName]/[streamName] |
hls(ts封装格式) | http://[hostAddress]:[httpPort]/[applicationName]/[streamName]/playlist.m3u8 |
hls(fmp4封装格式) | http://[hostAddress]:[httpPort]/[applicationName]/[streamName]/playlist_sfm4s.m3u8 |
hls时移 | http://[hostAddress]:[httpPort]/[applicationName]/[streamName]/playlist.m3u8?shifttime=[shifttime] |
hls回看 | http://[hostAddress]:[httpPort]/[applicationName]/[streamName]/playlist.m3u8?start_time=[start_time]&end_time=[end_time] |
http-flv | http://[hostAddress]:[httpPort]/applicationName/[streamName]/play.flv |
[hostAddress]: 是你运行Ti Top Streamer的服务器的主机地址。
[rtmpPort]: 是你运行Ti Top Streamer的服务器的rtmp流服务端口,默认是1935
[httpPort]: 是你运行Ti Top Streamer的服务器的http流服务端口,默认是8080
[applicationName]: 是这个Application的名字
[streamName]: 是在这个application中流的名字
[shifttime]: 时移播放时,开始播放时间和当前直播点的时差,单位是秒,比如60表示从当前直播点往回倒退60秒开始播放。
[start_time]: 回看的起始时间,是个Unix时间戳,精确到毫秒。
[end_time]: 回看的截至时间,是个Unix时间戳,精确到毫秒。注意,这个end_time参数也可以被duration参数取代,例如&duration=xxxxxxxx ,它是精确到毫秒的时长。
我们假设,这个Application的名字为live,streamName为myStream,再假设主机地址为192.168.10.102,rtmp流服务端口为1935,http流服务端口为8080,那么相关拉流url就是:
rtmp://192.168.10.102:1935/live/myStream http://192.168.10.102:8080/live/myStream/playlist.m3u8 http://192.168.10.102:8080/live/myStream/playlist_sfm4s.m3u8 http://192.168.10.102:8080/live/myStream/playlist.m3u8?shifttime=60 http://192.168.10.102:8080/live/myStream/playlist.m3u8?start_time=1693476761000&end_time=1693478321000 http://192.168.10.102:8080/live/myStream/play.flv
2、Ti Top Streamer 支持基于token的防盗链技术,通过这个技术,您可以实现对拉流的安全保护。下面介绍一下实现步骤:
1) 启用防盗链功能,如下图所示:
注1:在下图的复选框上打勾,表示启用防盗链功能(默认是没有启用的)
注2:设置SharedKey,它是一个共享密钥,您可以自己输入,也可以点击"生成"按钮自动生成。
2) 通过代码生成拉流url
在拉流的url里,除了主机地址和端口外,其它部分是根据拉流协议、applicationName、streamName、SharedKey、expiredTime(失效时间)来确定的。
计算过程如下:
A、首先你要确定一个url失效时间,比如1分钟后失效(url失效的意思是当你用这个url拉流时,系统会拒绝这个拉流请求,但是不影响已经开始拉流的连接)
url失效时间是一个绝对值,是一个unix时间戳,精确到秒。也就是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。然后将它转换为16进制形式(字符用小写)
B、将 sharedKey、applicationName、streamName以及expiredTime 按这里表述的前后顺序链接起来,相当于(sharedKey+applicationName+streamName+expiredTime)
C、计算上面字符串的MD5值,相当于md5(sharedKey+appName+streamName+expiredTime)
D、然后你要生成两个url查询参数tiliuSecurityToken和tiliuExpiredTime,前者就是上面的md5值,后者就是前面说的url失效时间的16进制形式(字符用小写)。
注意: 之所以在这两个参数中使用"tiliu"这样的前缀,目的是为了避免跟您的其它自定义参数混淆。
E、将上面两个url查询参数加入到常规的拉流url中,例如:
rtmp://192.168.10.102:1935/live/myStream?tiliuSecurityToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&tiliuExpiredTime=xxxxxxxxxx http://192.168.10.102:8080/live/myStream/playlist.m3u8?tiliuSecurityToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&tiliuExpiredTime=xxxxxxxxxx http://192.168.10.102:8080/live/myStream/play.flv?tiliuSecurityToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&tiliuExpiredTime=xxxxxxxxxx下面是一个页面工具,可以让您方便的生成防盗链拉流url:
主机地址:
rtmp流服务端口: http流服务端口:
applicationName:
streamName:
sharedKey:
失效时间:(秒)以后
注: 点击此按钮后将会发起一个后台调用,传入以上参数值,获得对应的拉流url如下:
拉流url会显示在这里
下面是这个页面工具的后台代码,采用nodejs编写,您可以参照它改写其它语言版本:
app.post('/pull/url', function (req, res) { let hostAddress = req.body.hostAddress; let rtmpPort = req.body.rtmpPort; let httpPort = req.body.httpPort; let applicationName = req.body.applicationName; let streamName = req.body.streamName; let sharedKey = req.body.sharedKey; let expiredSecond = parseInt(req.body.expiredSecond); let now = new Date(); let expiredTime = parseInt( now.getTime() / 1000 ) + expiredSecond ; let expiredTime_hex = expiredTime.toString(16); // js输出的都是小写 let originKey = sharedKey + applicationName + streamName + expiredTime_hex; let caculatedMd5 = md5(originKey) ;//这里用了md5这个库 let rtmp_base_url = "rtmp://"+hostAddress+":"+rtmpPort+"/"+applicationName+"/"+streamName ; let rtmp_url = rtmp_base_url+"?tiliuSecurityToken="+caculatedMd5+"&tiliuExpiredTime="+expiredTime_hex; let hls_base_url = "http://"+hostAddress+":"+httpPort+"/"+applicationName+"/"+streamName+"/playlist.m3u8" ; let hls_url = hls_base_url+"?tiliuSecurityToken="+caculatedMd5+"&tiliuExpiredTime="+expiredTime_hex; let flv_base_url = "http://"+hostAddress+":"+httpPort+"/"+applicationName+"/"+streamName+"/play.flv" ; let flv_url = flv_base_url+"?tiliuSecurityToken="+caculatedMd5+"&tiliuExpiredTime="+expiredTime_hex; res.status(200).json({"code":200,"rtmpUrl":rtmp_url,"hlsUrl":hls_url,"flvUrl":flv_url}); });我们强烈建议您将生成拉流url的代码逻辑放在服务器端,就像我们上面这个例子这样,通过接口从后台获取。