您现在的位置:首页 > 文档 > 推流
1、如果你使用rtmp向Ti Top Streamer推流,那么你需要知道推流url是什么样的格式。
注:首先你需要一个直播流来源类型为rtmp push的Application, 关于源流类型,请阅读 基本概念中的源流类型
推流URL格式如下:
rtmp://[hostAddress]:[rtmpPort]/[applicationName]/[streamName][hostAddress]: 是你运行Ti Top Streamer的服务器的主机地址。
[rtmpPort]: 是你运行Ti Top Streamer的服务器的rtmp流服务端口,默认是1935
[applicationName]: 是Ti Top Streamer中Application的名字
[streamName]: 是你指定的流的名字,在obs studio中称之为key
我们假设,这个Application的名字为live,streamName为myStream,再假设主机地址为192.168.10.102,端口为1935,那么推流url就是:
rtmp://192.168.10.102:1935/live/myStream
2、Ti Top Streamer 支持基于token的防盗链技术,通过这个技术,您可以实现对推流的安全保护。下面介绍一下实现步骤:
1) 启用防盗链功能,如下图所示:
注1:在下图的复选框上打勾,表示启用防盗链功能(默认是没有启用的)
注2:设置SharedKey,它是一个共享密钥,您可以自己输入,也可以点击"生成"按钮自动生成。
2) 通过代码生成rtmp推流url
在rtmp推流的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查询参数加入到常规的rtmp推流url中,例如:
rtmp://192.168.10.102:1935/live/myStream?tiliuSecurityToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&tiliuExpiredTime=xxxxxxxxxx下面是一个页面工具,可以让您方便的生成防盗链推流url:
主机地址:
端口:
applicationName:
streamName:
sharedKey:
失效时间:(秒)以后(我们会为您转为绝对时间)
注: 点击此按钮后将会发起一个后台调用,传入以上参数值,获得一个推流url如下:
rtmp推流url会显示在这里
您如果想实际推流做个测试,有很多工具可供选择,比如FFMpeg、OBS Studio以及Vmix。 下面的例子是采用FFMpeg推送一个mp4文件(sample.mp4)中的音视频内容。
ffmpeg -re -i sample.mp4 -vcodec copy -acodec copy -f flv "上面的rtmp 推流 url"
您可以从这里获取FFMpeg : http://ffmpeg.org/download.html
下面是上面生成rtmp url的页面工具的后台代码,采用nodejs编写,您可以参照它改写其它语言版本:
app.post('/rtmp/push/url', function (req, res) { let hostAddress = req.body.hostAddress; let rtmpPort = req.body.rtmpPort; 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 base_url = "rtmp://"+hostAddress+":"+rtmpPort+"/"+applicationName+"/"+streamName ; let url = base_url+"?tiliuSecurityToken="+caculatedMd5+"&tiliuExpiredTime="+expiredTime_hex; res.status(200).json({"code":200,"url":url}); });我们强烈建议您将生成推流url的代码逻辑放在服务器端,就像我们上面这个例子这样,通过接口从后台获取。