>백엔드 개발 >PHP 튜토리얼 >클라우드 영상을 활용한 온라인 교육 및 앵커 시스템 구현

클라우드 영상을 활용한 온라인 교육 및 앵커 시스템 구현

PHPz
PHPz원래의
2016-07-28 08:26:511460검색

앵커와 게임 앵커는 최근 다른 웹 애플리케이션에 비해 매우 인기가 높습니다. 라이브 비디오 스트리밍은 여전히 ​​약간 복잡합니다. FMS를 이용하여 서버를 구축하고 테스트를 해보았으나 아직 라이브 방송이 안정적이지 않습니다. 나중에 Alibaba Cloud 비디오 서비스를 사용해 보았는데 괜찮았지만 클라이언트를 제공하지 않았습니다. 그러다가 클라이언트를 제공하는 NetEase Cloud Video를 발견하고 사용해 보았는데 NetEase Cloud의 지연 시간이 Alibaba Cloud보다 낮다는 것을 확인하고 라이브 비디오 서비스로 선택했습니다. NetEase Cloud의 API 예제는 Java로 되어 있습니다. 고객 서비스에 PHP가 있는지 문의한 후 NetEase Cloud의 API를 보냈습니다. 직접 작성할 방법도 없고 인터페이스도 간단합니다.

class v163Class{
private $AppKey;                //开发者平台分配的AppKey
private $AppSecret;             //开发者平台分配的AppSecret,可刷新
private $Nonce;                    //随机数(最大长度128个字符)
private $CurTime;                 //当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String)
private $CheckSum;                //SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)
const   HEX_DIGITS = "0123456789abcdef";
public function __construct($AppKey,$AppSecret){
$this->AppKey    = $AppKey;
$this->AppSecret = $AppSecret;
}
/**生成验证码**/
public function checkSumBuilder(){
//此部分生成随机字符串
$hex_digits = self::HEX_DIGITS;
$this->Nonce;
for($i=0;$i<128;$i++){            //随机字符串最大128个字符,也可以小于该数
$this->Nonce.= $hex_digits[rand(0,15)];
}
$this->CurTime = (string)(time());    //当前时间戳,以秒为单位
$join_string = $this->AppSecret.$this->Nonce.$this->CurTime;
$this->CheckSum = sha1($join_string);
}
/*****post请求******/
public function postDataCurl($url,$data=array()){
$this->checkSumBuilder();        //发送请求前需先生成checkSum
if(!empty($data)){
$json=json_encode($data);
}else{
$json="";
}
$timeout = 5000;
$http_header = array(
&#39;AppKey:&#39;.$this->AppKey,
&#39;Nonce:&#39;.$this->Nonce,
&#39;CurTime:&#39;.$this->CurTime,
&#39;CheckSum:&#39;.$this->CheckSum,
&#39;Content-Type: application/json;charset=utf-8;&#39;,
&#39;Content-Length: &#39; . strlen($json)
);
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if (false === $result) {
$result =  curl_errno($ch);
}
curl_close($ch);
return json_decode($result,true) ;
}
/***频道添加***/
public function channel_add($name,$type=0){
$url="https://vcloud.163.com/app/channel/create";
return $data=$this->postDataCurl($url,array("name"=>$name,"type"=>$type));
}
/****频道更新*****/
public function channel_update($name,$cid,$type=0){
$url="https://vcloud.163.com/app/channel/update";
return $data=$this->postDataCurl($url,array("name"=>$name,"cid"=>$cid,"type"=>$type));
}
/****频道删除******/
public function channel_delete($cid){
$url="https://vcloud.163.com/app/channel/delete";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
/****获取频道信息******/
public function channel_get($cid){
$url="https://vcloud.163.com/app/channelstats";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
/***
获取频道列表
records    int    单页记录数,默认值为10    否
pnum    int    要取第几页,默认值为1    否
ofield    String    排序的域,支持的排序域为:ctime(默认)    否
sort    int    升序还是降序,1升序,0降序,默认为desc    否
**/
public function channel_list($option=array("records"=>10,"pnum"=>1,"ofield"=>"ctime","sort"=>1)){
$url="https://vcloud.163.com/app/channellist";
return $data=$this->postDataCurl($url,$option);
}
/**重新获取推流地址***/
public function channel_reset($cid){
$url="https://vcloud.163.com/app/address";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
/*****
设置频道为录制状态
cid    String    频道ID    是
needRecord    int    1-开启录制; 0-关闭录制    是
format    int    1-flv; 0-mp4    是
duration    int    录制切片时长(分钟),默认120分钟    否
filename    String    录制后文件名,格式为filename_YYYYMMDD-HHmmssYYYYMMDD-HHmmss,
文件名录制起始时间(年月日时分秒) -录制结束时间(年月日时分秒)    否
****/
public function channel_setRecord($cid,$option=array()){
$url="https://vcloud.163.com/app/channel/setAlwaysRecord";
return $data=$this->postDataCurl($url,$option);
}
/****暂停频道*****/
public function channel_pause($cid){
$url="https://vcloud.163.com/app/channel/pause";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
/****批量暂停频道****/
public function channel_pauselist($cidList){
$url="https://vcloud.163.com/app/channellist/pause";
return $data=$this->postDataCurl($url,array("cidList"=>$cidList));
}
/****恢复频道*****/
public function channel_resume($cid){
$url="https://vcloud.163.com/app/channel/resume";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
/****批量恢复频道****/
public function channel_resumelist($cidList){
$url="https://vcloud.163.com/app/channellist/resume";
return $data=$this->postDataCurl($url,array("cidList"=>$cidList));
}
/****获取频道的视频地址*****/
public function channel_videolist($cid){
$url="https://vcloud.163.com/app/videolist";
return $data=$this->postDataCurl($url,array("cid"=>$cid));
}
}

NetEase는 윈도우 클라이언트를 제공하는데 사용시 렉이 있어서 아직까지 OBS를 직접 사용하고 있습니다. OBS는 간단한 구성을 갖춘 무료 라이브 비디오 클라이언트입니다. 라이브 방송을 시작하려면 스트림에 URL을 입력하세요.

클라우드 영상을 활용한 온라인 교육 및 앵커 시스템 구현

클라우드 영상을 활용한 온라인 교육 및 앵커 시스템 구현

이렇게 하면 라이브 스트리밍을 시작할 수 있습니다.

플레이어의 경우 video.js를 사용하세요. [추천도서: Node.js 동영상 튜토리얼]

<video id="zbvideo" class="video-js vjs-default-skin" controls preload="none" width="90%" height="398" poster="/static/images/videobg.jpg" data-setup="{}">
<source src="{$data.zb_http}" />
<source src="{$data.zb_hls}"  type="application/x-mpegURL"  />
<source src="{$data.zb_rtmp}" type="rtmp" />
</video>
<link href="/plugin/videojs/video-js.css" rel="stylesheet">
<script src="/plugin/videojs/ie8/videojs-ie8.min.js"></script>
<script src="/plugin/videojs/video.js"></script>

이렇게 하면 라이브 방송 서비스가 완성됩니다.

공용 클래스를 추가하면 자동으로 생성됩니다. API 기반 생방송 주소 새로고침 생방송 주소는 만료 시 자동으로 삭제됩니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

관련 기사

더보기