流媒体技术世界——分享技术,增值服务
收到播放请求后,Flussonic Media Server向后台发起认证
在接收到用户的播放请求时,Flussonic Media Server可以向后台发起认证,如果认证通过,则接受这个播放请求,如果认证失败,则拒绝这个播放请求。

注:在这里,这个 后台 指的是你的认证系统(如果有的话)。

要实现这个目标,首先您需要在Flussonic Media Server的配置文件中为每一个直播流增加下面的 auth 指令,如下:
auth http://host;
	
其中 host 参数可以是下面几种情况:

  • 1、空着:这时Flussonic Media Server同意所有播放请求,正常播放。
  • 2、一个正常的http url:这时Flussonic Media Server会向这个URL发起Http请求,在请求参数中会携带用于认证的必要信息。
  • 3、一个本地文件:这个文件会被Flussonic Media Server当作一个Lua脚本文件,并请求执行这个文件。

下面的图示,展示了从访问网站(可以理解为你的后台系统+前台网页)开始,到请求资源、再到认证、再到播放的全过程。
flussonic
下面是一个更详细的流程说明:

  • 1、假设你的网站上展示了一个视频资源,等待用户点击播放,这个视频流由Flussonic Media server提供。你在网站上为这个视频资源生成一个一个播放URL,在这个URL中包含一个用于认证的Token。

    以下是关于这个URL的一些例子:

    Apple HLS: http://192.168.2.3:8080/stream1/index.m3u8?token=60334b207baa



    HDS: http://192.168.2.3:8080/stream1/manifest.f4m?token=60334b207baa



    rtmp: application rtmp://192.168.2.3/static stream name: stream1?token=60334b207baa



    RTSP: rtsp://192.168.2.3/stream1?token=60334b207baa

  • 2、当Flussonic Media Server接收到用户的播放请求后,它会检查Url中是否携带这个token参数:

    如果没有这个参数,Flussonic Media Server就会自动生成一个token。如果在Flussonic Media Server的配置中有 no_auto_token 的配置,那么Flussonic Media Server不会去创建这个token,并立即返回403状态码,拒绝用户的请求。

    如果有这个参数,检查这个token对应的Session在系统中是不是已经处于 OPEN 状态(注:Open意味着已经开始向用户播放器传送视频流)。

    Session的标识是一个HASH字符串,计算方式如下:

    hash(stream_name + client_ip + token)

    如果用户的IP地址改变(比如从4G网络切换到奥WIFI),或者stream name发生变化,那么Flussonic Media Server将为此生成一个新的Session。

  • 3、如果token对应的Session 还不是 OPEN 状态,那么Flussonic Media Server就会向你的 后台 系统发起认证请求,在请求中会携带以下用于认证的参数:

    token :这是由你的网站或者是由Flussonic Media Server自动生成的token。

    name :这是直播流的名字或这是点播文件的名字。

    ip :用户的IP地址。

    referer :HTTP Referer 或 RTMP播放时网站的URL。

    total_clients :当前Flussonic Media Server服务器上的所有在线观看用户数。

    stream_clients :当前Flussonic Media Server服务器上的所有在线观看当前这个视频流的用户数。

    request_type new_session 表示这是一个新的Session, update_session 表示这是一个已有的Session。

    type :表示播放纯属协议类型,包括 hds, hls, rtmp, rtsp, mpegts or mp4

  • 4、根据 后台 系统返回的Http状态码的不同,Flussonic Media Server做相应的处理,如下:

    200 :那么这个Session会被设置为 OPEN 状态或者维持原有状态。

    401 或 403 : 那么这个Session会被设置为 Close ,也就是说会关闭这个Session。

    301 或 302 : 标准的Http重定向。

    如果返回其它状态码,或者是没有响应(3秒内),Flussonic Media Server会重新发出认证请求。

注:如果是Lua脚本返回的响应,格式为{true, {}} 或 {false, {}}。

在Flussonic Media Server中,一个Session被设置为 OPEN 状态之后,并不是永久性的处于这个状态,每隔3分钟,Flussonic Media Server还会继续向 后台 系统发起认证,得到最新的反馈,并更新这个Session的状态。

如果你觉得3分钟不合适,那么你可以通过http响应的Http Header X-AuthDuration 参数调整这个时间间隔。

重要提示 : 如果配置中的 auth 指令被修改了,例如换了一个新的用于认证的URL。记住,新的设置只针对新的播放请求有作用,已经处于 OPEN 状态的依旧会使用原有的。

如果一个Session的请求已经被 后台 系统拒绝了,这个Session就处于 Close 状态,这个状态在Flussonic Media Server中会一直保留,如果还是同样的token和同样的用户IP进来请求播放这个流,那么就会被Flussonic Media Server直接拒绝(不用去认证)。


关于这个 后台 系统上,当接收到Flussonic Media Server发来的认证请求后,如何获得认证参数完整认证逻辑,下面我们给出一个PHP代码的例子:


先假设在PHP服务器上有一个存放用户名和密码的文件,如下:

user1:token1
user2:token2
user3:token3
	

然后,下面的PHP代码展示了获得参数,到这个文件中查询,并完成Http响应:
<?php

$get = print_r($_GET, true);
$token = $_GET["token"];
if(!$token || !strlen($token)) {
    header('HTTP/1.0 403 Forbidden');
    error_log("No token provided", 4);
    die();
}

$tokens = array();
$contents = explode("\n", file_get_contents("auth.txt"));
foreach($contents as $line) {
    if(strlen($line) > 3) {
        $parts = explode(":", $line);
        $tokens[$parts[1]] = $parts[0];
    }
}


if($tokens[$token]) {
    header("HTTP/1.0 200 OK");
    header("X-UserId: ".$tokens[$token]."\r\n");
    header("X-Max-Sessions: 1\r\n"); // Turn this on to protect from multiscreen
} else {
    header('HTTP/1.0 403 Forbidden');
}
?>	
	

如果后台系统在3秒内没有响应,Flussonic Media Server会如何处理?


1、还没有处于 OPEN 状态的Session,那这次认证的结果被认为是拒绝用户请求,并保持这个状态。

2、已经认证通过,处于 OPEN 状态的Session,这次认证的结果被认为接受用户请求。

3、已经处于 CLose 状态的Session,那这次认证的结果被认为是拒绝用户请求,并保持这个状态。


关于播放行为的记录和统计


如果你要对用户的播放行为做出记录和统计,你需要在你的 后台 系统向Flussonic Media Server做响应时,在Http header中加上 X-UserId 参数。Flussonic Media Server就会在内部记录这个Session(连同X-UserId)这次播放行为。

匿名用户
评论

我们的地址


北京市朝阳区管庄西里建基商务楼423室


邮编:100024

关于我们


北京锑流科技有限责任公司


官网:www.ttstream.com

联系我们


王经理:13381282581

京ICP备14033868号-2