PHP 阿里直播(阿里直播SDK 直播介绍 直播扩展知识)

直播原理图示:

关于直播,首先要明白直播里面的是什么定西

推流:

推流是指采集阶段的打包内容传输到服务器的过程

实际上就是将现场视频信号传输到网络的过程,推流对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是糟糕。

要用于流式传输,音频和视频数据必须通过传输协议封装,成为流式数据。常用的流媒体协议包括RTSP、RTMP、HLS等。

RTMP也成为手机直播中最常用的流媒体协议,对实时性要求很高。

最后,音视频流数据通过一定的Qos算法推送到网络,由CDN分发。   

  

拉流:   

拉流是指服务器拥有直播内容,与服务器建立连接,接收数据,并根据协议类型(如RTMP、RTP、RTSP、HTTP等)进行拉取的过程。

拉流端的核心处理在播放器端的解码和渲染。   

 

推流和拉流的区别:   

当用户最终看到一个视频直播时,可能有两种方式实现。

一种是主动将内容传输到服务器,缓存在边缘节点,终端用户可以随时调用观看,这是推流

一种是终端用户想看某个内容的时候,从源站检索内容,缓存在边缘节点,这是拉流

流的种类:视频流,音频流,文件流,混合流

直播流的处理:

直接播放:使用播放器播放混合流,为什么要使用官方播放器或者需要集成官方播放器SDK?那是因为取到的流都是加密的,所以需要解密,故要使用官方播放器或者需要集成官方播放器SDK。

导播台导播:适用场景是需要设置背景的直播,这个就要需要使用导播台,实际上就是把导播需要的流给到导播台,他们有专业的设备去合成需要的背景

医药相关知识扩展:

飞行检查:具有监督管理许可权的部门或组织检查被监督物件,主要目的就是为了了解被监督物件的真实情况,发现其需要改进的问题。

需要注意的点:

1.观看人数:具体要求的人数根据当地监管部门的规定来,一般10到15人是符合规定的

2.直播时长:具体要求的人数根据当地监管部门的规定来,一般需要在30分钟 - 45分钟

3.直播人数:具体要求的人数根据当地监管部门的规定来,一般需要大于等于1人

4.直播内容:不能有推销药品或者器械类的相关内容,这个是强制要求的,一定需要注意

5.物料留存:具体要求的人数根据当地监管部门的规定来,一般是需要直播保留回放,课件(保留时间大于等于30天)

等保三级或者三级等保:参观博主相关文章,博主已经写好了,需要的自取

广播协议:

看到这里有的人会有一点懵,为什么官方的给出了三个:rtmp播放地址 flv播放地址 hls播放地址

那么rtmp,flv,hls 这三个又是什么东西?其实这三个是广播协议。

那为什么官方会提供三个广播协议,参考下面的对比就知道自己的业务需要那一个地址了。

名称

传输协议

视频格式

延时

数据分段

是否支持H5

rtmp

tcp

flv tag

2s

连续流

不支持HTML5

flv

HTTP

flv

2s

连续流

支持HTML5

flv

HTTP

m3u8/ts

10s

切片

支持HTML5

主方法:

class Aliyun_Live_model extends CI_model

{

//自定义的方法

public $push_url = '';//推流域名

public $push_key = '';//推流域名配置的鉴权Key

public $play_url = '';//播流地址

public $play_key = '';//播放域名配置的鉴权Key

public $appName = "";//直播的应用名称,用于区分直播流媒体文件存放路径

public $replay_url="";

public $expireTime=604800;//配置过期时间为1小时秒

//初始化

public function __construct()

{

parent::__construct();

}

//推流地址

//StreamName表示直播流名称,是一路流的标识符,通常与某个域名一起唯一标识一路流

public function get_Push_Url($streamName)

{

$timeStamp = time() + $this->expireTime;

$sstring = '/'.$this->appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$this->push_key;

$md5hash = md5($sstring);

return 'rtmp://'.$this->push_url.'/'.$this->appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$md5hash;

}

//拉流地址

//StreamName表示直播流名称,是一路流的标识符,通常与某个域名一起唯一标识一路流

public function get_Pull_Url($streamName)

{

$timeStamp = time() + $this->expireTime;

$rtmp_sstring = '/'.$this->appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$this->play_key;

$rtmp_md5hash = md5($rtmp_sstring);

return 'rtmp://'.$this->play_url.'/'.$this->appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$rtmp_md5hash;

}

//播放地址

//StreamName表示直播流名称,是一路流的标识符,通常与某个域名一起唯一标识一路流

public function get_Play_Url($streamName)

{

$timeStamp = time() + $this->expireTime;

$hls_sstring = '/'.$this->appName.'/'.$streamName.'.m3u8-'.$timeStamp.'-0-0-'.$this->play_key;

$hls_md5hash = md5($hls_sstring);

return 'http://'.$this->play_url.'/'.$this->appName.'/'.$streamName.'.m3u8?auth_key='.$timeStamp.'-0-0-'.$hls_md5hash;

}

/*********************************分界线****************************************/

//官方定义SDK方法:

function push_url($push_domain,$push_key,$expireTime,$appName,$streamName){

$push_url = '';

//未开启鉴权Key的情况下(阿里下可以配置)

if($push_key==''){

$push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName;

echo $push_url;

return;

}

$timeStamp = time() + $expireTime;

$sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$push_key;

$md5hash = md5($sstring);

$push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$md5hash;

echo $push_url;

echo PHP_EOL;

return;

}

function play_url($play_domain,$play_key,$expireTime,$appName,$streamName){

//未开启鉴权Key的情况下(阿里下可以配置)

if($play_key==''){

$rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName;

$flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv';

$hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8';

}else{

$timeStamp = time() + $expireTime;

//rtmp播放地址

$rtmp_sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$play_key;

$rtmp_md5hash = md5($rtmp_sstring);

$rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$rtmp_md5hash;

//flv播放地址

$flv_sstring = '/'.$appName.'/'.$streamName.'.flv-'.$timeStamp.'-0-0-'.$play_key;

$flv_md5hash = md5($flv_sstring);

$flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv?auth_key='.$timeStamp.'-0-0-'.$flv_md5hash;

//hls播放地址

$hls_sstring = '/'.$appName.'/'.$streamName.'.m3u8-'.$timeStamp.'-0-0-'.$play_key;

$hls_md5hash = md5($hls_sstring);

$hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8?auth_key='.$timeStamp.'-0-0-'.$hls_md5hash;

}

}

}

//播放器

<head>

<link rel="stylesheet" type="text/css" href="/medincine_page.css" />

<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css" />

<script charset="utf-8" type="text/javascript" src="" target="_blank">https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script>

<script src="/static/admin/aliplay/aliplayercomponents-1.0.6.min.js"></script>

<style>

.prism-player{ overflow:hidden!important}

.prism-player .prism-controlbar{ bottom:3px !important}

.prism-player .prism-info-display{ padding:10px 0}

.prism-player video,.fullScreen video{ width:100%; height:100%}

</style>

</head>

<body>

<div class="prism-player" id="J_prismPlayer">

</div>

</body>

<script>

const getTime = function (memoryVideo) {};

const saveTime = function (memoryVideo, currentTime) {};

var skinLayout = [

{name: "bigPlayButton", align: "cc"},

{name: "H5Loading", align: "cc"},

{name: "errorDisplay", align: "tlabs", x: 0, y: 0},

{name: "infoDisplay"},

{name:"tooltip", align:"blabs",x: 0, y: 56},

{name: "thumbnail"},

{name: "controlBar", align: "blabs", x: 0, y: 0,

children: [

{name: "progress", align: "blabs", x: 0, y: 44},

{name: "playButton", align: "tl", x: 15, y: 12},//播放/暂停按钮

{name: "timeDisplay", align: "tl", x: 10, y: 7},//播放时间

{name: "fullScreenButton", align: "tr", x: 25, y: 12},//全屏

{name: "volume", align: "tr", x: 18, y: 10},//音量

]

}

];

function validataOS(){

if(navigator.userAgent.indexOf("Window")>0){

return "Windows";

}else if(navigator.userAgent.indexOf("Mac OS X")>0) {

return "Mac" ;

}else if(navigator.userAgent.indexOf("Linux")>0) {

return "Linux";

}else{

return NUll;

}

}

var computer_type = validataOS();

var player_config={

id: 'J_prismPlayer',

width: '100%',

height:'100%',

skinLayout: skinLayout,

cover:"",//封面图

autoplay:true, //自动播放

isLive:true,

rePlay:true,

preload:true,

components: [

{name: 'MemoryPlayComponent', type: AliPlayerComponent.MemoryPlayComponent},

{name: 'RateComponent',type: AliPlayerComponent.RateComponent},//倍数播放组件

{name: 'QualityComponent',type: AliPlayerComponent.QualityComponent},//清晰度组件

],

};

if(player_config.isLive){

player_config.source = "";

player_config.components=[ {name: 'MemoryPlayComponent', type: AliPlayerComponent.MemoryPlayComponent},]

}else if(computer_type != 'Windows'){

player_config.source = "";

}else{

player_config.encryptType = 1;

player_config.vid = '';

player_config.playauth ='';

}

var player = new Aliplayer(player_config, function (player) {});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值