• 阿里云视频直播PHP-SDK


    阿里云 视频直播 配置 及 PHP-SDK 接入教程
    准备工作
    域名管理
    配置鉴权
    地址生成器及DEMO演示-熟悉鉴权
    接入SDK
    推流回调的配置
    阿里云 视频直播 配置 及 PHP-SDK 接入教程

    个人感觉,阿里的文档比微信的要坑很多…
    微信最多是有些比较重要的东西放到比较不起眼、比较难发现的地方.
    阿里的文档就是要么就是sdk已经更新了,但是文档还没更新,导致文档与SDK不匹配.在关键点卡我一下…
    要么是同样的功能有好几个版本的SDK以及文档,却不告诉你哪个是最新的…
    吐槽结束~

    准备工作

    1.最重要的,先仔细看下视频直播文档!
    2. 购买阿里云的视频直播服务 ,用量不大的时候建议使用按量收费的方式结算,接通之后消耗了流量才扣钱;
    3. 准备好备案的域名,到时候需要解析两个二级域名(推流域名与拉流域名);
    4. 如果需要存储直播视频文件的话,需要使用对象存储OSS服务,因为直播录制的视频都会到这里面.这也是可以先使用后收费的(按量收费).

    域名管理

    首先进入视频直播的控制台>>域名管理>>添加域名
    添加两次,分别是播流域名和推流域名,

    添加完成之后进行域名解析配置这两个域名的CDN加速指向分配的CNAME.

    然后配置将它们两个域名(一个推流,一个播流)关联起来.

    配置鉴权

    推流与播流的链接都是以一定的规则自己拼起来的,首先要在域名配置


    地址生成器及DEMO演示-熟悉鉴权

    AppName:随意理解,或者理解为分组吧;
    StreamName:理解为直播的id,一个StreamName同时只能推一个直播流.可以开始直播-终止直播-开始直播-终止直播…

    有关鉴权的规则是这样的:鉴权规则
    代码如下:

    <?php

    $AppName = 'AppName'; //app名称 ,随意设定
    $StreamName = "StreamName"; //直播流名称 ,随意设定

    $now = time();

    //------------------- 阿里云视频直播控制台 地址生成器 鉴权设置 -----------

    //加密key,即直播后台鉴权里面自行设置

    $pull_key = 'oCudfghYGM'; //播流 主key
    $push_key = '0hgggfjAhT'; //推流 主key
    $time = $now + 60*60*3; //URL的有效期 180分钟 随意设定

    //------------------------ end ---------------------------------------------

    $strpush = "/{$AppName}/{$StreamName}-{$time}-0-0-{$push_key}";

    $push_cdn = 'push.paxy365.com';
    $pull_cdn = 'pull.paxy365.com';

    //推流地址 一个
    $pushurl = "rtmp://{$push_cdn}/{$AppName}/{$StreamName}?auth_key={$time}-0-0-".md5($strpush);

    //播流地址
    $strviewrtmp = "/{$AppName}/{$StreamName}-{$time}-0-0-{$pull_key}";
    $strviewflv = "/{$AppName}/{$StreamName}.flv-{$time}-0-0-{$pull_key}";
    $strviewm3u8 = "/{$AppName}/{$StreamName}.m3u8-{$time}-0-0-{$pull_key}";

    $rtmpurl = "rtmp://{$pull_cdn}/{$AppName}/{$StreamName}?auth_key={$time}-0-0-".md5($strviewrtmp); //播流地址
    $flvurl = "http://{$pull_cdn}/{$AppName}/{$StreamName}.flv?auth_key={$time}-0-0-".md5($strviewflv); //播流地址
    $m3u8url = "http://{$pull_cdn}/{$AppName}/{$StreamName}.m3u8?auth_key={$time}-0-0-".md5($strviewm3u8); //播流地址

    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
    获取到推流URL和播流URL就可以愉快地玩直播啦,可以下载阿里的DEMO(APP)到手机上,测试这URL是否有用~

    接入SDK

    阿里是将所有的SDK打包一起下载,里面不仅有视频直播的SDK,还有别的业务的SDK…T_T
    PHP SDK 下载地址

    我的项目是TP框架(还是3.2的T_T)

    在一开始拿到SDK代码的时候很懵逼,无从下手…
    度娘了下才知道要引入的是这两个文件 ! ! !

    <?php
    use OSSOssClient;
    use OSSCoreOssException;
    include_once LIB_PATH . 'Vendor/aliyun-openapi/aliyun-php-sdk-core/Config.php'; // LIB_PATH 指向的是 项目地址/ThinkPHP/Library/
    include_once LIB_PATH . 'Vendor/aliyun-oss-php/autoload.php';

    1
    2
    3
    4
    5
    6
    配置AccessKeyID AccessKeySecret
    这里并没有用子账号RAM权限,因此我这种方法配置的密钥对阿里的所有密钥有效,不建议这么做!


    直播在线流SDK接入,我这里是用已知的直播流名称去检测它是否在线

    <?php
    /**
    * 在线流判断
    * 获取某直播流正在推的流的信息
    */
    public function StreamsOnlineList($stream_name=''){

    $iClientProfile = DefaultProfile::getProfile("cn-shenzhen", 'AccessKeyID', 'AccessKeySecret'; //cn-shenzhen 这个貌似都可以,我填cn-hangzhou也没问题 Access Key ID,Access Key Secret
    $client = new DefaultAcsClient($iClientProfile);

    $request = new liveRequestV20161101DescribeLiveStreamsOnlineListRequest();
    $request ->setAppName('应用名称'); //应用名称。
    $request ->setStreamName($stream_name); //流名称。不填的话就是查AppName下所有的在线直播流
    $request ->setDomainName('pull.xxx.com'); //您的加速域名。播流域名
    $request ->setPageNum('1'); //取得第几页,默认1。

    //以下参数我都没有用到,因此注释了
    //$request ->setStreamType('all'); //流类型。取值范围:all raw trans 对应查询所有流、原始流、转码流,默认all返回所有流信息
    //$request ->setStartTime('2019-03-04T00:00:00Z');
    //$request ->setEndTime('2019-03-04T23:59:59Z');
    //$request ->setPageSize('2000'); //每页大小,最大3000。 取值:1~3000之前的任意整数。 默认值:2000
    //$request ->setQueryType('strict'); //指定是否模糊匹配流名称。 取值: fuzzy:模糊匹配 strict:精准匹配
    //$request ->setOrderBy(''); //文档中没有,sdk有该参数,非必填
    //$request ->setOwnerId(''); //文档中没有,sdk有该参数,非必填

    //针对阿里云进行请求
    $response = $client->getAcsResponse($request);
    //对象转数组,总感觉我这种方法太土了...网上也有很多自定义的函数可以对象转数组
    $response = json_decode(json_encode($response,true),true);
    dump($response);exit;

    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
    推流回调的配置

    将回调接收到的数据打印出来

    ["action"]=>
    string(7) "publish" //publish 推流开始 publish_done推流结束
    ["ip"]=>
    string(14) "139.147.54.224"
    ["id"]=>
    string(24) "y-12005-870-1-2019030610" //StreamName 自己设定的直播流名称(这里叫id)
    ["app"]=>
    string(16) "push.xxxxx.com"
    ["appname"]=>
    string(6) "gifoge" //App名称
    ["time"]=>
    string(10) "1551839491"
    ["usrargs"]=>
    string(277) "vhost=pull.paxy365.com&auth_key=1551850143-0-0-6f97891e39859d558b8e583860f22094&ali_publisher_ip=119.137.54.224&ali_edge_node_ip=175.6.241.195&ali_node_via=cache2.cn541%2clive11.l2em21-3&alilive_streamidv2=2.cn541_6638_355280423_1551839490901&alilive_clienthost=live11.l2em21-3"
    ["node"]=>
    string(13) "135.6.541.195"

  • 相关阅读:
    SAP Fiori Elements Object Page页面渲染原理
    使用SAP CRM中间件从ERP下载plant到CRM
    SAP ABAP数据库表字段checktable的实现原理
    使用SAP CRM中间件从ERP下载Customer的错误消息:Distribution channel is not allowed for sales organization
    使用SAP CRM中间件从ERP下载Customer的错误消息:Customer classification does not exist
    SAP CRM中间件Request download的警告信息:message Object is in status Wait
    SAP CRM中间件Request download的警告信息:Form of address 0001 not designated for organization
    使用SAP CRM中间件下载customer的错误消息:Number not in interval XXX – XXX
    使用SAP CRM中间件从ERP下载plant到CRM
    Flink实例(十六):FLINK 异步IO (一)简介
  • 原文地址:https://www.cnblogs.com/liliuguang/p/10685743.html
Copyright © 2020-2023  润新知