• EasyNVR平台实现播流地址超时无法播放功能过程分享


    EasyNVR平台中会生成 hls、flv、ws-flv 等多种流,当用户获取对应的流地址后,可以一直播放,因此需要对流地址进行超时管理,如果超时后无法播放。

    设计方案如下:

    1、首先在生成的播流地址中添加 expire参数,即播流地址为:
    http://127.0.0.1:10800/flv/hls/stream_1.flv?expire=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjIxMTIxNTAsImlzcyI6InRzaW5nc2VlLWVhc3ludnIifQ.DlKQtcQZuYi0NcL_bWZWrWU1KDAMGueb8jwBxK_vqzc ;
    2、如果播流地址中不包含 expire 参数,则返回无权限播放;
    3、如果播流地中包含 expire 参数,解析参数过期时间,如果超时,则返回无权限播放。

    expire 的生成代码如下:

    func GeneratePlayToken(expireTime time.Time) (string, error) {
       //设置token有效时间
       /*nowTime:=time.Now()
       expireTime:=nowTime.Add(3*time.Hour)*/
    
       claims := jwt.StandardClaims{
          // 过期时间
          ExpiresAt: expireTime.Unix(),
          // 指定token发行人
          Issuer: "tsingsee-easynvr",
       }
    
       tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
       //该方法内部生成签名字符串,再用于获取完整、已签名的token
       token, err := tokenClaims.SignedString(jwtSecret)
       return token, err
    }
    
    

    解析 expire 的代码如下:

    // 返回 token 是否有效
    func ParsePlayToken(token string) (bool, int, error) {
       //用于解析鉴权的声明,方法内部主要是具体的解码和校验的过程,最终返回*Token
       tokenClaims, err := jwt.ParseWithClaims(token, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
          return jwtSecret, nil
       })
    
       if tokenClaims != nil {
          // 从tokenClaims中获取到Claims对象,并使用断言,将该对象转换为我们自己定义的Claims
          // 要传入指针,项目中结构体都是用指针传递,节省空间。
          if claims, ok := tokenClaims.Claims.(*jwt.StandardClaims); ok && tokenClaims.Valid {
             dura := int(claims.ExpiresAt - time.Now().Unix())
             if dura > 0 {
                return true, dura, nil
             } else {
                return false, 0, nil
             }
          }
          return false, 0, nil
       }
       return false, 0, err
    }
    
    

    最终前端地址包含对应的 expire 信息。

  • 相关阅读:
    win 8.1右键引起资源管理器重启
    lodash学习笔记之Array方法
    window下Ionic环境安装
    Ionic angular-ui-router小案例
    NPOI SetColumnHidden隐藏列不起作用的原因
    关于js隐式转换的有趣例子
    oracle中between and闭合性
    Javascript有那些奇技淫巧?
    PowerDesigner逆向工程连接服务器端oracle过程
    openlayers 添加 arcgis rest feature server 使用 vue cli+jsonp
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/14859749.html
Copyright © 2020-2023  润新知