七牛-Pili Streaming Cloud Server-Side Library For PHP

1 篇文章 0 订阅
1 篇文章 0 订阅
七牛-Pili Streaming Cloud Server-Side Library For PHP
<?php
class  QinqiuPpi{
    private $ak = '';
    private $sk='';
    private $hubName = "";
    private $domian = "";

    /**
     * 初始化参数
     * QinqiuPpi constructor.
     * @param array $options
     * @param $options ['ak']
     * @param $options ['sk']
     * @param $options ['hubName'] //存储空间//防止直播卡顿尽量设置为加速域名
     * @param $options ['domian']  //域名
     */
    public function __construct($options)
    {
        $this->ak = isset($options["ak"]) ? $options["ak"] : '';
        $this->sk = isset($options["sk"]) ? $options["sk"] : '';
        $this->hubName = isset($options["hubName"]) ? $options["hubName"] : '';
        $this->domian = isset($options["domian"]) ? $options["domian"] : '';
    }

    /**
     * 创建一个hub对象
     */
    private function hub(){
        $ak = $this->ak;
        $sk = $this->sk;
        $hubName = $this->hubName;
        $mac = new Qiniu\Pili\Mac($ak, $sk);
        $client = new Qiniu\Pili\Client($mac);
        $hub = $client->hub($hubName);
        return $hub;
    }

    /**
     * Stream的相关操作及信息
     */
    public function stream($streamKey = ''){
        //获取stream
        if(empty($streamKey)){
            $streamKey = "php-sdk-test" . time();
        }else{
            $streamKey = $streamKey;
        }
        $stream = hub()->stream($streamKey);
        try {
            //创建stream
            $resp = $this->hub()->create($streamKey);
            //获取stream info
            $resp = $stream->info();
            //列出所有流
            $resp = $this->hub()->listStreams("php-sdk-test", 1, "");
            //列出正在直播的流
            $resp = $this->hub()->listLiveStreams("php-sdk-test", 1, "");
            //返回流
            return $stream;
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }

    /**
     * 启用流
     * @return mixed
     */
    public function  stream_enable(){
        try {
            //启用流
            $stream_info = stream()->info();
            //查询直播状态
            $status = stream()->liveStatus();
            return $stream_info;
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }
    /**
     * 获取流的信息
     * @return mixed
     */
    public function  stream_info(){
        try {
            //获取流信息
        $stream_info = stream()->info();
            //查询直播状态
            $status = stream()->liveStatus();
            return $stream_info;
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }

    /**
     * 禁用流
     * @return mixed
     */
    public function stream_disable(){
        try {
            //禁用流
            $stream_info = stream()->disable();
            //查询直播状态
            $status = stream()->liveStatus();
            return $stream_info;
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }

    /**
     * 保存直播回放
     * @param $start 开始时间
     * @param $end 结束时间
     */
    public function save($start,$end){
        try {
            //保存直播回放
            $fname = stream()->save($start, $end);
            //保存的直播回放地址
            $url = $this->domian . $fname['fname'];
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }

    /**
     * 查询直播历史
     * @param $start
     * @param $end
     */
    public function stream_historyActivity($start,$end){
        try {
            //查询直播历史
            $fname = stream()->historyActivity($start, $end);
        } catch (\Exception $e) {
            echo "Error:", $e, "\n";
        }
    }
    /**
     * RTMP推流地址: RTMPPublishURL(domain, hub, streamKey, mac, expireAfterSeconds)
     *RTMP直播地址: RTMPPlayURL(domain, hub, streamKey)
     *HLS直播地址: HLSPlayURL(domain, hub, streamKey)
     *HDL直播地址: HDLPlayURL(domain, hub, streamKey)
     *截图直播地址: SnapshotPlayURL(domain, hub, streamKey)
     */
    /**
     * @param $streamKey //流
     * @return array
     */
    public function push_url($streamKey){
        $domain = $this->domian;
        $hubName = $this->hubName;
        $ak = $this->ak;
        $sk = $this->sk;
        //获取流
        $streamKey = $this->stream($streamKey);
        //RTMP 推流地址
        $url = \Qiniu\Pili\RTMPPublishURL($domain, $hubName, $streamKey, 3600, $ak, $sk);
        //RTMP 直播放址
        $url2 = \Qiniu\Pili\RTMPPlayURL($domain, $hubName, $streamKey); //rtmp格式
        //HLS 直播地址
        $url3 = \Qiniu\Pili\HLSPlayURL($domain, $hubName, $streamKey);   //m3u8格式
        //HDL直播地址
        $url4 = \Qiniu\Pili\HDLPlayURL($domain, $hubName, $streamKey);     //flv格式
        //截图直播地址:
        $url5 =  \Qiniu\Pili\SnapshotPlayURL($domain, $hubName, $streamKey);

        $result = array('url'=>$url,'rtmp'=>$url2,'m3u8'=>$url3,'streamKey'=>$streamKey,'flv'=>$url4,"play_img" =>$url5);
        return $result;
    }
    /**
     * 视频转码
     */
    public function checkout_transcoding(){
        import('phpSDK.autoload');
        //对已经上传到七牛的视频发起异步转码操作
        $accessKey = $this->ak;
        $secretKey = $this->sk;
        $domain = $this->domian;
        $auth = new \Qiniu\Auth($accessKey, $secretKey);
        //要转码的文件所在的空间和文件名。
        $bucket = 'tst1';
        //转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
        $pipeline = 'mseplay';
        //转码完成后通知到你的业务服务器。
        $pfop = new \Qiniu\Processing\PersistentFop($auth, $bucket, $pipeline);
        //获取文件名
        $key_arr = M("live_store")->where(["tran_status"=>0,"is_del"=>1,"tran_id"=>0])->getField('fname',true);
        if($key_arr){
            foreach ($key_arr as $k =>$v){
                //要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html
                $rest  = preg_replace("/m3u8/",'mp4',$v);
                $fops = "avthumb/mp4";
                //saveas另存并且重名
                $fops .= '|saveas/' . \Qiniu\base64_urlSafeEncode("$bucket:$rest");
                list($id, $err) = $pfop->execute($v, $fops);
                if ($err == null) {
                    M("live_store")->where(["fname"=>$v])->save(["tran_id"=>$id,"tran_status"=>1]);
                }
            }
        }
        //查询转码的进度和状态
        $tran_arr  = M("live_store")->where(["stan_status"=>1,"is_del"=>1])->getField("tran_id",true);
        foreach ($tran_arr as $k=>$v){
            $mp4 = M("live_store")->where(["tran_id"=>$v])->getField("mp4");

            list($ret, $err) = $pfop->status($v);
            if ($err == null) {
                if($ret["items"][0]["key"]){
                    $data["mp4"] = $domain.$ret["items"][0]["key"];
                    M("live_store")->where(["tran_id" => $v])->save($data);
                }
            }
        }
    }
}

注明

php 转码的 demo
Qiniu Resource (Cloud) Storage SDK for PHP
七牛服务端php-SDK
七牛直播云服务端相关开发文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值