• 阿里云直播推流和播流地址的生成方法PHP


    最近在用阿里云的直播SDK在进行直播功能的开发,整体来说磕磕绊绊,因为里面有好多的东西,一时半会的搞不定,但是工期又有期限,所以天天熬夜,程序员真心不容易,废话不多说,今天分享这个主要就是来说明一下阿里云的直播推流和播流地址怎么生成的

    在这之前我们需要了解上面说的推流 播流 拉流都是什么玩意啥意思

    ·视频直播的基础服务是直播流的接入和分发服务。您可以使用推流地址通过推流工具将视频流推送至阿里云平台进行视频的内容处理及分发,观众可以通过播放地址和播放器观看直播内容。推送至阿里云中心的视频可以根据您的需求进行设置,从而适用于不同的应用场景。

    推流
    推流是把采集阶段封装好的音视频直播流推送到阿里云直播服务中心的过程。
    
    拉流
    拉流是将第三方直播流地址拉取到阿里直播中心进行CDN内容分发,推流至需要的节点的过程。
    
    播流
    播流是将直播服务中心已有直播内容,分发到播放器进行播放过程。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ·

    
      
    /**
      * 生成推流地址
      * @param $push_domain 推流域名
      * @param $push_key 推流域名配置的鉴权Key
      * @param $expireTime 过期时间(单位是秒)
      * @param $appName 推流AppName
      * @param $streamName 推流StreamName
      */
    function push_url($push_domain,$push_key,$expireTime,$appName,$streamName){
    
            $push_url = '';
            //未开启鉴权Key的情况下
            if($push_key==''){
                    $push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName;
                    echo $push_url;
                    return;
            }
            $timeStamp = time() + $expireTime;
            $sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$push_key;
            $md5hash = md5($sstring);
            $push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$md5hash;
            echo $push_url;
            echo PHP_EOL;
            return;
    }
    /**
     * 生成播放地址
     * @param $play_domain 播放域名
     * @param $play_key 播放鉴权Key
     * @param $expireTime 过期时间(单位是秒)
     * @param $appName 播放appName(同推流appName)
     * @param $streamName 播放streamName,播放源流时,streamName 同推流streamName;播放转码流时,streamName 为推流streamName_{转码模板ID}
     */
    function play_url($play_domain,$play_key,$expireTime,$appName,$streamName){
            //未开启鉴权Key的情况下
            if($play_key==''){
                    $rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName;
                    $flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv';
                    $hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8';
            }else{
                    $timeStamp = time() + $expireTime;
    
                    $rtmp_sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$play_key;
                    $rtmp_md5hash = md5($rtmp_sstring);
                    $rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$rtmp_md5hash;
    
                    $flv_sstring = '/'.$appName.'/'.$streamName.'.flv-'.$timeStamp.'-0-0-'.$play_key;
                    $flv_md5hash = md5($flv_sstring);
                    $flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv?auth_key='.$timeStamp.'-0-0-'.$flv_md5hash;
    
                    $hls_sstring = '/'.$appName.'/'.$streamName.'.m3u8-'.$timeStamp.'-0-0-'.$play_key;
                    $hls_md5hash = md5($hls_sstring);
                    $hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8?auth_key='.$timeStamp.'-0-0-'.$hls_md5hash;
            }
    
            echo 'rtmp播放地址: '.$rtmp_play_url;
            echo PHP_EOL;
            echo 'flv播放地址: '.$flv_play_url;
            echo PHP_EOL;
            echo 'hls播放地址: '.$hls_play_url;
            echo PHP_EOL;
            return;
    }
    //推流域名
    $push_domain = 'testpush.cn';
    //推流域名配置的鉴权Key
    $push_key = 'test_Push_key';
    //生成随机的AppName
    $appName = md5(uniqid(microtime(true),true));
    //生成随机的StreamName
    $streamName = md5(uniqid(microtime(true),true));
    //配置过期时间为1小时
    $expireTime = 3600;
    //播放域名
    $play_domain = 'testPlay.cn';
    //播放域名配置的鉴权Key
    $play_key = 'test_play_key';
    push_url($push_domain,$push_key,$expireTime,$appName,$streamName);
    play_url($play_domain,$play_key,$expireTime,$appName,$streamName);
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    哎咋说呢,多多的实践吧,因为得静下心去测试,一起努力合作共赢

  • 相关阅读:
    【闲言碎语】学习 文本编辑器vim及其插件、ranger、C语言、WSL配置、X11等等
    字节跳动3-3大牛力荐!RabbitMQ实战指南:消息队列面试必刷手册
    ZCC5429 异步升压芯片
    2022牛客多校联赛第八场 题解
    单元测试的最佳实践
    SpringBoot--参数校验--注解
    【CAN、LIN通信的区分】
    leetcode 132. 分割回文串 II
    黑马C++ 02 核心6 —— 类和对象_继承(重难点)
    如何在vector中插入和删除元素?
  • 原文地址:https://blog.csdn.net/qq_19448821/article/details/138201548