关于阿里云的直播API开发

需求:教育企业,

1.针对每个教室都要有直播能给到家长在直播时间能看到

2.考虑到有些家长白天需要工作,可能会要求看录播功能

3.不需要人为去操作直播(比如开启,关闭)

开发语言:PHP 框架TP5.1

功能开始:

因为种种原因。最终选择了我目前使用的方法。

教室有监控摄像头===》RTSP(不懂自行百度)

我买了IPC ONVIF推流器(RTSP转RTMP)

然后每个学校安装一个,每个学校大概有10个教室以上,校区有8个。

又因为种种原因最终选择了阿里云的直播。

扫描二维码关注公众号,回复: 5026294 查看本文章

1.在访问控制(RAM)里面分配一个子账户,创建accesskey。在这里拿到AccessKeyID  和 AccessKeySecret,主账户的也行,但是阿里推荐子账户,听他的不会错。

2.管理控制台->产品与服务->视频直播->找到其开发文档->下载SDK

3.引入SDK,记住这里下载的是PHP的SDK,个人感觉,写的不是很好,因为全英文,东西很多,做直播直接找到Live的就行。

4.怎么控制开启和关闭。禁推和恢复,A教室到上课时间有开始上课时间,下课时间。根据上课时间从禁推里面找到此教室恢复推流,根据下课时间在在线流里面找到此教室禁推。

5.录制问题。录制文件管理->存储至OSS->里面有个回调地址,这个地址就是在阿里云录制完成,或者说你流开启到结束,包括禁推。就会把这个视频的名称和地址推送给你,这个地址建议是http的,不要是https。https我测试不稳定

6.服务器写一个定时脚本,按需求设置多少时间跑一次脚本触发代码。

A.PHP

<?php
/**
 * 直播页面
 * @author sky
 * @date 2018.8.27 
 */

namespace app\api\controller;
use app\api\common\controller\Base;
use think\Db;
use DefaultProfile;
use DefaultAcsClient;
use live\Request\V20161101\DescribeLiveStreamsBlockListRequest;
use live\Request\V20161101\DescribeLiveStreamsOnlineListRequest;
class A extends Base
{
	/**
	 * [index description]
	 * @author Sky 2018-10-08
	 * @return [type] [description]
	 */ 
	
	private $streamName = array();
	private $studentArr = array();

	public function __construct()
	{
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Profile/DefaultProfile.php';
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/DefaultAcsClient.php';
	}

	public function a()
	{   
		//2.查看禁推流
		$BlockStreamUrl = get_object_vars($this->DescribeLiveStreamsBlockListRequest());
        $url = aaaaaaa B.php;//这个是开启推流地址
        $this->curl($url);
		

	}

	//查看在线流
	public function b()
	{	

     	//2.查看在线直播流
     	$OnlineStreamUrl = get_object_vars($this->DescribeLiveStreamsOnlineListRequest());
$url = aaaaaaa B.php;//这个是禁止推流地址
        $this->curl($url);
		
     	 	
	}



	//推流黑名单列表
	protected function DescribeLiveStreamsBlockListRequest()
	{
        $request = new DescribeLiveStreamsBlockListRequest ();
        $request ->setDomainName('');
        $clientProfile = DefaultProfile::getProfile(
        "",                   # 您的 Region ID 
        "",               # 您的 AccessKey ID
        ""            # 您的 AccessKey Secret
        );
        $client = new DefaultAcsClient($clientProfile);
        $response = $client->getAcsResponse($request);
        return $response;
	}

	 // 获取在线推流
    public function DescribeLiveStreamsOnlineListRequest() {
        $request = new DescribeLiveStreamsOnlineListRequest();
        $request ->setDomainName('');
        $request ->setAppName('');
         $clientProfile = DefaultProfile::getProfile(
        "",                   # 您的 Region ID 
        "",               # 您的 AccessKey ID
        ""            # 您的 AccessKey Secret
        );

        $client = new DefaultAcsClient($clientProfile);
        //针对阿里云进行请求
        $response = $client->getAcsResponse($request);
        return $response;
    }

	public function curl($url)
	{
	 $curl = curl_init();
     
     //设置抓取的url
      curl_setopt($curl, CURLOPT_URL, $url);

     //设置头文件的信息作为数据流输出
      curl_setopt($curl, CURLOPT_HEADER, 1);
      //设置获取的信息以文件流的形式返回,而不是直接输出。
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      //执行命令
     // curl_setopt($curlp, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      $data = curl_exec($curl);
      // var_dump( curl_error($curl));exit;
     //关闭URL请求
     curl_close($curl);
     //显示获得的数据
     //var_dump($data);
	}



}

?>

B.PHP

<?php
/**
 * 保存当天上课的学生信息和课程信息
 * @author sky
 * @date 2018.10.08 
 */

namespace app\api\controller;
use app\api\common\controller\Base;
use think\facade\Request;
use DefaultProfile;
use DefaultAcsClient;
use live\Request\V20161101\ResumeLiveStreamRequest;
use live\Request\V20161101\ForbidLiveStreamRequest;
use app\admin\common\model\ClassData;
class B extends Base
{
	/**
	 * [index description]
	 * @author Sky 2018-10-08
	 * @return [type] [description]
	 */  
	private $StreamName;
    private $studentArr;
	public function __construct()
	{
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Profile/DefaultProfile.php';
		require_once '../extend/aliyun-openapi-php-sdk/aliyun-php-sdk-core/DefaultAcsClient.php';
	}

	public function a()
	{   //1.引入SDK
		
		$this->StreamName = Request::param('');
        $this->studentArr = Request::param('');
		$this->ResumeLiveStreamRequest();//恢复推流
	}

	public function b()
	{   
		$this->StreamName = Request::param('');
		$this->ForbidLiveStreamRequest();//禁止推流
      
       
	}


	//恢复直播推流
    protected function ResumeLiveStreamRequest()
    {	
    	//$streamName = $this->streamName;
        $request = new ResumeLiveStreamRequest ();
        $request ->setAppName('');
        $request ->setDomainName('');
        $request ->setliveStreamType('publisher');
        $request ->setStreamName($this->StreamName);

        $clientProfile = DefaultProfile::getProfile(
        "",                   # 您的 Region ID 
        "",               # 您的 AccessKey ID
        ""            # 您的 AccessKey Secret
        );
        $client = new DefaultAcsClient($clientProfile);

        //针对阿里云进行请求
        $response = $client->getAcsResponse($request);

        return $response;
    }

    //禁止直播推流
    protected function ForbidLiveStreamRequest()
    {
        $request = new ForbidLiveStreamRequest ();
        $request ->setAppName('');
        $request ->setDomainName('');
        $request ->setliveStreamType('publisher');
        $request ->setStreamName($this->StreamName);

         $clientProfile = DefaultProfile::getProfile(
        "",                   # 您的 Region ID 
        "",               # 您的 AccessKey ID
        ""            # 您的 AccessKey Secret
        );

        $client = new DefaultAcsClient($clientProfile);
        //针对阿里云进行请求
        $response = $client->getAcsResponse($request);

        return $response;
    }
}

?>

猜你喜欢

转载自blog.csdn.net/qq_31164125/article/details/83061364
今日推荐