| 
					
				 | 
			
			
				@@ -13,7 +13,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace app\admin\controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+require CMF_ROOT . 'vendor/tencentcloud/vendor/autoload.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use cmf\controller\AdminBaseController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use TencentCloud\Live\V20180801\Models\DescribeLivePullStreamTasksRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use TencentCloud\Live\V20180801\Models\DescribeLiveStreamOnlineListRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use TencentCloud\Live\V20180801\Models\DescribeLiveStreamPublishedListRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use think\Db; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 根据腾讯云sdk请求 创建直播拉流 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -28,6 +33,15 @@ use think\Exception; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use think\exception\PDOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class LiveingController extends AdminbaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $secretId   = 'AKID575vicM9rU6iBiWJNi09HF8xhMxOk4Od'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $secretKey  = 'MiDkHwgOFpMpGf2KXcZIo9MYY5qnmhU5'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $pushDomain = 'push.umotool.com'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $pushKey    = 'd79106bd037188b132bc2d4cc272aa98'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $pullKey    = 'JYthadi3fG4C4fbdmF6R'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private $pullDomain = 'tintonkangdahotel.com'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     protected function getLiveClass(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $liveclass=Db::name("live_class")->order('list_order asc, id desc')->column('id,name'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -153,7 +167,7 @@ class LiveingController extends AdminbaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $pull_key = cmf_get_option('configpri')['tx_play_key']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            require CMF_ROOT . 'vendor/tencentcloud/vendor/autoload.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 为了保护密钥安全,建议将密钥设置在环境变量中或者配置文件中。 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,7 +196,7 @@ class LiveingController extends AdminbaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 $params = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     "SourceType" => "PullLivePushLive", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     "SourceUrls" => [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        'https://umotool.com/live/'.$uid.'.m3u8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        'https://tintonkangdahotel.com/live/'.$uid.'.flv', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     "DomainName" => 'push.umotool.com', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     "PushArgs"   => 'txSecret='.$txSecret.'&txTime='.$txTime, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -198,7 +212,9 @@ class LiveingController extends AdminbaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 推流地址、播流地址、taskId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 $data['push'] = 'rtmp://push.umotool.com/live/'. $uid . '?' .$params['PushArgs']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $data['pull'] = 'https://umotool.com/live/'.$uid.'.m3u8?' .$params['PushArgs']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $pull_urls = $this->getPullUrl( 'live', $uid, $end_timestamp ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $data['pull'] = $pull_urls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 $data['TaskId'] = $resp->TaskId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 echo json_encode( $data , JSON_UNESCAPED_UNICODE ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -409,5 +425,464 @@ class LiveingController extends AdminbaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $this->success("修改成功!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取推流地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 如果不传key和过期时间,将返回不含防盗链的url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param domain 您用来推流的域名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        streamName 您用来区别不同推流地址的唯一流名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        key 安全密钥 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        time 过期时间 sample 2016-11-12 12:00:00 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return String url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getPushUrl( $appName, $streamName, $time ): string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $domain = $this->pushDomain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $key    = $this->pushKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txTime = strtoupper( base_convert( strtotime( $time ), 10, 16 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //txSecret = MD5( KEY + streamName + txTime ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txSecret = md5( $key . $streamName . $txTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return "?" . http_build_query( array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "txSecret" => $txSecret, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "txTime"   => $txTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        return $domain . ( $ext_str ?? "" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getPullUrl( $appName, $streamName, $time ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $domain = $this->pullDomain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $key    = $this->pullKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txTime = strtoupper( base_convert( strtotime( $time ), 10, 16 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //txSecret = MD5( KEY + streamName + txTime ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txSecret   = md5( $key . $streamName . $txTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $build_data = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "txSecret" => $txSecret, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "txTime"   => $txTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ext_str    = "?" . http_build_query( $build_data ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "rtmp://" . $domain . "/" . $appName . "/" . $streamName . $ext_str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "https://" . $domain . "/" . $appName . "/" . $streamName . ".m3u8" . $ext_str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "https://" . $domain . "/" . $appName . "/" . $streamName . ".flv" . $ext_str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getPullUrl2( $appName, $streamName, $time ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $domain = $this->pullDomain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $key    = $this->pullKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txTime = strtoupper( base_convert( strtotime( $time ), 10, 16 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //txSecret = MD5( KEY + streamName + txTime ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $txSecret   = md5( $key . $streamName . $txTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $build_data = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "txSecret" => $txSecret, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "txTime"   => $txTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ext_str    = "?" . http_build_query( $build_data ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "rtmp://" . $domain . "/" . $appName . "/" . $streamName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "https://" . $domain . "/" . $appName . "/" . $streamName . ".m3u8", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "https://" . $domain . "/" . $appName . "/" . $streamName . ".flv" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param $sport_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param $live_data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return false|void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 拉流转推 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function setRtmpGetHttp( $sport_id, $live_data ,$play_urls_count=2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "ap-bangkok", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req = new CreateLivePullStreamTaskRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $SourceUrls = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(count($live_data[ 'urls' ]) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $SourceUrls[] = $live_data[ 'urls' ][0]['m3u8']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!empty($live_data[ 'urls' ][$play_urls_count]['flv'])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $SourceUrls[] = $live_data[ 'urls' ][$play_urls_count]['flv']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    foreach ( $live_data[ 'urls' ] as $item ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if ( !empty( $item[ 'flv' ] && empty( $SourceUrls ) ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $SourceUrls[] = $item[ 'flv' ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ( empty( $SourceUrls ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $AppName    = 'sport_test_live'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $StreamName = 'sport_test_live_' . $sport_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $now        = time(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $_now       = $this->getNow( $live_data ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $time      = date( 'Y-m-d H:i:s', $_now ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $StartTime = date( 'Y-m-d\TH:i:s\Z', ( $now - 28800 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $EndTime   = date( 'Y-m-d\TH:i:s\Z', ( $_now - 28800 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $push_url  = $this->getPushUrl( $AppName, $StreamName, $time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //播放链接限制10分钟 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $_time     = date( 'Y-m-d H:i:s', time() + 600 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $pull_urls = $this->getPullUrl( $AppName, $StreamName, $_time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SourceType" => "PullLivePushLive", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SourceUrls" => $SourceUrls, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "DomainName" => $this->pushDomain, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "PushArgs"   => $push_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "AppName"    => $AppName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "StreamName" => $StreamName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "StartTime"  => $StartTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "EndTime"    => $EndTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "Operator"   => 'tom001', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个CreateLivePullStreamTaskResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp   = $client->CreateLivePullStreamTask( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $v_data = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'tencent_res' => json_decode( json_encode( $resp ), 1 ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'play_urls'   => $pull_urls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $v_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getNow( $live_data ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $start_time = $live_data[ 'kickoffTS' ] + ( 12 * 60 * 60 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ( $start_time >= time() ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return ( $start_time + 10800 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $sy_time = time() - $start_time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $zy = 10800 - $sy_time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ( $sy_time > 9500 ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $add_time = time() + 1800; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $add_time = time() + $zy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $add_time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function upRtmpGetHttp( $sport_id, $live_data, $taskId ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。密钥可前往官网控制台 https://console.tencentcloud.com/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "ap-bangkok", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req        = new ModifyLivePullStreamTaskRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $SourceUrls = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            foreach ( $live_data as $item ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if ( !empty( $item[ 'm3u8' ] && empty( $SourceUrls ) ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $SourceUrls[] = $item[ 'm3u8' ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ( empty( $SourceUrls ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $AppName    = 'sport_test_live'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $StreamName = 'sport_test_live_' . $sport_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $now        = time(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $_now       = time() + 600; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $time       = date( 'Y-m-d H:i:s', $_now ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $StartTime  = date( 'Y-m-d\TH:i:s\Z', ( $now - 28800 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $EndTime    = date( 'Y-m-d\TH:i:s\Z', ( $_now - 28800 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $pull_urls = $this->getPullUrl( $AppName, $StreamName, $time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params    = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "TaskId"     => $taskId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SourceUrls" => $SourceUrls, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "StartTime"  => $StartTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "EndTime"    => $EndTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "Operator"   => 'tom001', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个ModifyLivePullStreamTaskResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp = $client->ModifyLivePullStreamTask( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $v_data = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'tencent_res' => json_decode( json_encode( $resp ), 1 ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'play_urls'   => $pull_urls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 输出json格式的字符串回包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return $v_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 输出json格式的字符串回包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            print_r( $resp->toJsonString() ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function upRtmpGetHttpUrl( $sport_id ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $AppName    = 'sport_test_live'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $StreamName = 'sport_test_live_' . $sport_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $_now       = time() + 600; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $time       = date( 'Y-m-d H:i:s', $_now ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $pull_urls  = $this->getPullUrl( $AppName, $StreamName, $time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return $pull_urls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function delSportExpired( $taskId ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。密钥可前往官网控制台 https://console.tencentcloud.com/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "ap-bangkok", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req = new DeleteLivePullStreamTaskRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "TaskId"   => $taskId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "Operator" => "tom001" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个DeleteLivePullStreamTaskResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp = $client->DeleteLivePullStreamTask( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 输出json格式的字符串回包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $json = $resp->toJsonString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return json_decode( $json, 1 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getLiveAll( $page = 1, $limit = 20, $liveid = '' ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。密钥可前往官网控制台 https://console.tencentcloud.com/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "ap-bangkok", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req = new DescribeLivePullStreamTasksRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'PageNum'  => $page, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'PageSize' => $limit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ( $liveid ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $params[ 'TaskId' ] = $liveid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个DescribeLivePullStreamTasksResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp = $client->DescribeLivePullStreamTasks( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 输出json格式的字符串回包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return json_decode( $resp->toJsonString(), 1 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getLiveOnlineList( $page = 1, $limit = 100, $AppName = 'A-live' ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req = new DescribeLiveStreamOnlineListRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "AppName"  => $AppName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "PageNum"  => $page, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "PageSize" => $limit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个DescribeLiveStreamOnlineListResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp = $client->DescribeLiveStreamOnlineList( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return json_decode( $resp->toJsonString(), 1 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function getLiveStreamPublishedList( $AppName = 'A-live', $StreamName = '' ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $cred = new Credential( $this->secretId, $this->secretKey ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个http选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile = new HttpProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $httpProfile->setEndpoint( "live.tencentcloudapi.com" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个client选项,可选的,没有特殊需求可以跳过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile = new ClientProfile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $clientProfile->setHttpProfile( $httpProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化要请求产品的client对象,clientProfile是可选的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $client = new LiveClient( $cred, "", $clientProfile ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 实例化一个请求对象,每个接口都会对应一个request对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req       = new DescribeLiveStreamPublishedListRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $now       = time(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $StartTime = date( 'Y-m-d\TH:i:s\Z', ( $now - 86400 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $EndTime   = date( 'Y-m-d\TH:i:s\Z', $now ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $params = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'DomainName' => $this->pushDomain, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "StartTime"  => $StartTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "EndTime"    => $EndTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "AppName"    => $AppName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ( !empty( $StreamName ) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $params[ 'StreamName' ] = $StreamName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $req->fromJsonString( json_encode( $params ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回的resp是一个DescribeLiveStreamPublishedListResponse的实例,与请求对象对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $resp = $client->DescribeLiveStreamPublishedList( $req ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return json_decode( $resp->toJsonString(), 1 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch ( TencentCloudSDKException $e ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public function startAnchorRtmp( $roomid, $sportId ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $AppName    = 'A-live'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $StreamName = 'A-live-' . $roomid . '-' . $sportId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $now        = time(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //推球时间 过期时间是 12个小时 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $start_time = date( 'Y-m-d H:i:s', $now + ( 12 * 60 * 60 ) ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //播放链接 有效时间是10分钟,每5分钟更新一次 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $end_time = date( 'Y-m-d H:i:s', $now + 600 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ext_str = $this->getPushUrl( $AppName, $StreamName, $start_time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $rtmpPushUrl    = "rtmp://" . $this->pushDomain . "/" . $AppName . "/" . $StreamName . $ext_str; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $rtmp_push_url  = "rtmp://" . $this->pushDomain . "/" . $AppName . "/"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $rtmp_push_code = $StreamName . $ext_str; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $pull_urls = $this->getPullUrl2( $AppName, $StreamName, $end_time ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $urls = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rtmp_push_url'  => $rtmp_push_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rtmp_push_code' => $rtmp_push_code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rtmp_push'      => $rtmpPushUrl, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'hls_pull'       => $pull_urls[ 1 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'http_pull'      => $pull_urls[ 2 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'rtmp_pull'      => $pull_urls[ 0 ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'code' => 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data' => $urls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |