urbanu619 7 months ago
parent
commit
341424f617

+ 52 - 22
web/app/admin/controller/LiveingController.php

@@ -17,14 +17,15 @@ use cmf\controller\AdminBaseController;
 use think\Db;
 
 // 根据腾讯云sdk请求 创建直播拉流
-use TencentCloud\Cvm\V20170312\CvmClient;
-use TencentCloud\Cvm\V20170312\Models\DescribeInstancesRequest;
 use TencentCloud\Live\V20180801\Models\CreateLivePullStreamTaskRequest;
+use TencentCloud\Live\V20180801\Models\DeleteLivePullStreamTaskRequest;
 use TencentCloud\Common\Exception\TencentCloudSDKException;
 use TencentCloud\Common\Credential;
 use TencentCloud\Common\Profile\ClientProfile;
 use TencentCloud\Common\Profile\HttpProfile;
 use TencentCloud\Live\V20180801\LiveClient;
+use think\Exception;
+use think\exception\PDOException;
 
 class LiveingController extends AdminbaseController {
     protected function getLiveClass(){
@@ -206,10 +207,6 @@ class LiveingController extends AdminbaseController {
                 $data['TaskId'] = $resp->TaskId;
 
                 echo json_encode( $data , JSON_UNESCAPED_UNICODE );
-                die;
-
-//                print_r($resp); die;
-
 
             }
             catch(TencentCloudSDKException $e) {
@@ -221,24 +218,57 @@ class LiveingController extends AdminbaseController {
 
 
 
-    public function getPullUrl( $appName, $streamName, $time )
+    public function xiabo()
     {
-        $domain = $this->pullDomain;
-        $key    = $this->pullKey;
-
-        $txTime = strtoupper( base_convert( strtotime( $time ), 10, 16 ) );
-        $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"
-        ];;
+        $uid = $_POST['uid'];
+        $TaskId = $_POST['TaskId'];
+        if (empty($uid) || empty($TaskId)) {
+            echo "请输入 TaskId";
+        } elseif (!is_numeric($uid) || !is_numeric($TaskId)) {
+            echo "TaskId 必须是数字";
+        } else {
 
+            try {
+                // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
+                // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。密钥可前往官网控制台 https://console.tencentcloud.com/capi 进行获取
+                $cred = new Credential("AKID575vicM9rU6iBiWJNi09HF8xhMxOk4Od",
+                    "MiDkHwgOFpMpGf2KXcZIo9MYY5qnmhU5");
+                // 实例化一个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();
+
+
+                $data['uid'] = $uid;
+                $data['TaskId'] = '已下播-'.$TaskId;
+                $rs = DB::name('live')->update($data);
+
+
+//                return $json;
+                return json_decode( $json, 1 );
+
+            } catch ( TencentCloudSDKException | PDOException | Exception $e ) {
+                return [ 'ode' => $e->getCode(), 'msg' => $e->getMessage() ];
+            }
+        }
     }
 
 

+ 74 - 2
web/themes/admin_simpleboot3/admin/liveing/index.html

@@ -42,7 +42,7 @@
 				<tbody>
 					<foreach name="lists" item="vo">
 					<tr>
-						<td>{$vo.uid}</td>					
+						<td>{$vo.uid}</td>
 						<td>{$vo['userinfo']['user_nicename']} </td>
 						<td>{$vo['showid']}</td>
 						<td>{:date('Y-m-d H:i',$vo['starttime'])}</td>
@@ -54,7 +54,7 @@
                         <td>{$vo['totalcoin']}</td>
                         <td>{$vo['total_nums']}</td>
                         <td>{$vo['total_average']}</td>
-                        <td>{$vo['TaskId']}</td>
+                        <td class="taskid-display-{$vo['TaskId']}">{$vo['TaskId']}</td>
                         <td>{$vo['pull']}</td>
                         <td>{$vo['push']}</td>
                         <td>{$vo['deviceinfo']}</td>
@@ -63,6 +63,7 @@
                             <if condition="$vo['isvideo']==1">
                             <a class="btn btn-xs btn-primary" href='{:url("Liveing/edit",array("uid"=>$vo["uid"]))}'>{:lang('EDIT')}</a>
 							<a class="btn btn-xs btn-danger js-ajax-delete" href="{:url('Liveing/del',array('uid'=>$vo['uid']))}">{:lang('DELETE')}</a>
+							<a class="btn btn-xs btn-danger xiabo-btn" href="#" data-TaskId="{$vo['TaskId']}" data-uid="{$vo['uid']}" >下播</a>
                             </if>
 						</td>
 						
@@ -75,5 +76,76 @@
 		</form>
 	</div>
 	<script src="__STATIC__/js/admin.js"></script>
+	<script>
+		(function(){
+
+			// 给所有具有 .xiabo-btn 类的 <a> 标签添加点击事件监听器
+			$('.xiabo-btn').on('click', function(event) {
+				event.preventDefault(); // 阻止默认行为(例如链接跳转)
+
+				// 获取当前点击的 <a> 标签的 data-TaskId 和 data-uid 的值
+				var TaskId = $(this).attr('data-TaskId');
+				var uid = $(this).attr('data-uid');
+
+				// 检查值是否为空或者非数字
+				if (TaskId === '' || isNaN(TaskId)) {
+					alert('请输入正确的 TaskId(数字)');
+				} else {
+
+					$.ajax({
+						url: '/admin/liveing/xiabo.html',
+						type: 'POST',
+						data: {
+							uid: uid,
+							TaskId: TaskId,
+						},
+						dataType: 'json',
+						success: function (data) {
+
+							location.reload();
+							// $('.taskid-display-'+TaskId).val( '已下播-'+TaskId);
+
+							console.log('请求成功:', data);
+						},
+						error: function (error) {
+							console.error('请求失败:', error);
+						}
+					});
+				}
+			});
+
+			// 下播
+			/*$("#xiabo").on('click', function () {
+				// 获取元素的 data-TaskId 属性的值
+				var TaskId = $('#xiabo').attr('data-TaskId');
+				var uid = $('#xiabo').attr('data-uid');
+
+				// 检查值是否为空或者非数字
+				if (TaskId === '' || isNaN(TaskId)) {
+					alert('请输入正确的 TaskId(数字)');
+				} else {
+
+					$.ajax({
+						url: '/admin/liveing/xiabo.html',
+						type: 'POST',
+						data: {
+							uid: uid,
+							TaskId: TaskId,
+						},
+						dataType: 'json',
+						success: function (data) {
+
+							$('#taskid-display-'+TaskId).val( '已下播-'+TaskId);
+
+							console.log('请求成功:', data);
+						},
+						error: function (error) {
+							console.error('请求失败:', error);
+						}
+					});
+				}
+			})*/
+		})()
+	</script>
 </body>
 </html>