多协议、性能稳定、丰富API的流媒体服务器软件
您现在的位置:首页  >  文档  >  拉流

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,它是一个共享密钥,您可以自己输入,也可以点击"生成"按钮自动生成。

rtmp

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的代码逻辑放在服务器端,就像我们上面这个例子这样,通过接口从后台获取。