php也是可以做直播相关业务开发的_优品建站

php也是可以做直播相关业务开发的

  如今的直播平台到处都是了,自己动手用PHP去做一个视频直播,那是可以的,你可以用到swoole。但是会花很长时间去开发与测试吧!也不知道开发出来的效果会不会不稳定。
  所以为了节省更多的时间,开发视频直播基本都会用到第三方稳定的API,今天要讲到的是用PHP与阿里云视频直播API开发视频直播
  swoole做直播具体步骤如下:(带摄像头的笔记本)
  1、Swoole创建 2个监听 一个WebSocket监听服务(用于视频流传输)。一个本地 【Unix Socket文件描述符】(用于ffmpeg转码后的视频流接受与转发给WebSocket客户端。)
  2、浏览器使用 jsmpeg 这个项目连接 Swoole 提供的WebSocket 服务来获取视频流播放。
  3、使用ffmpeg 把直播的视频流 转码 为 mpeg 视频流格式 发送到 本地的Swoole 监听的【Unix Socket】文件描述符 
比如:$serv->addlistener("/var/run/myserv.sock", 0,SWOOLE_UNIX_STREAM); 文件描述符:/var/run/myserv.sock
  4、Swoole 监听的文件描述符 的 onReceive 事件会收到 ffmpeg 转码的视频流。在通过 Swoole的WebSocket方法push 给连接到 WebSocket服务的 客户端发送视频流。
  PHP与阿里云视频直播API开发视频直播
  1.下载sdk放入项目文件夹中


  核心就是aliyun-php-sdk-core,它的配置文件会自动加载相应的类
2.引入文件
  include_once LIB_PATH . 'ORG/aliyun-openapi/aliyun-php-sdk-core/Config.php'
3.配置客户端对象,需要Access Key ID,Access Key Secret
  $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "xxxx", "xxxx");  // Access Key ID,Access Key Secret
  $client = new DefaultAcsClient($iClientProfile);
4.调用请求类,并配置参数,就拿直播推流历史为例
  $request = new live\Request\V20161101\DescribeLiveStreamsPublishListRequest();
  $request ->setDomainName('live.yunlutong.com');
  $request ->setAppName('yunlutong');
  $request ->setStreamName('demo');
  $request ->setStartTime('2020-03-01T19:00:00Z');
  $request ->setEndTime('2020-03-29T19:00:00Z');
5.发起请求
  //针对阿里云进行请求
  $response = $client->getAcsResponse($request);
  exit(json_encode($response));

  完整代码如下
<?php
/**
 * 直播相关接口
 */
class LiveAction extends ApiAction
{
    protected function _initialize()
    {
        parent::_initialize();
    }

    // 获取推流历史
    public function DescribeLiveStreamsPublishList() {
        include_once LIB_PATH . 'ORG/aliyun-openapi/aliyun-php-sdk-core/Config.php';

        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "xxxx", "xxxx");  // Access Key ID,Access Key Secret
        $client = new DefaultAcsClient($iClientProfile);

        $request = new live\Request\V20161101\DescribeLiveStreamsPublishListRequest();
        $request ->setDomainName('live.yunlutong.com');
        $request ->setAppName('yunlutong');
        $request ->setStreamName('demo');
        $request ->setStartTime('2020-03-01T19:00:00Z');
        $request ->setEndTime('2020-03-29T19:00:00Z');

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

}

返回的数据

其他的接口请求也都类似这样,就不在这里一一列举,更多会用到的API,你是要查看API文档的,地址:https://help.aliyun.com/document_detail/48207.html

视频直播生成推流地址和播放地址的程序示例
直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。

示例代码
<?php
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_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_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_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;
        }

        echo 'rtmp播放地址: '.$rtmp_play_url;
        echo PHP_EOL;
        echo 'flv播放地址: '.$flv_play_url;
        echo PHP_EOL;
        echo 'hls播放地址: '.$hls_play_url;
        echo PHP_EOL;
        return;
}

//推流域名
$push_domain = 'testpush.cn';
//推流域名配置的鉴权Key
$push_key = 'test_Push_key';
//生成随机的AppName
$appName = md5(uniqid(microtime(true),true));
//生成随机的StreamNmae
$streamName = md5(uniqid(microtime(true),true));
//配置过期时间为1小时
$expireTime = 3600;

//播放域名
$play_domain = 'testPlay.cn';
//播放域名配置的鉴权Key
$play_key = 'test_play_key';

push_url($push_domain,$push_key,$expireTime,$appName,$streamName);
play_url($play_domain,$play_key,$expireTime,$appName,$streamName);
?>

  • uniapp实现多端开发, PHP写api接口的一些注意事项与安全策略
    市面上很多关于多端开发的框架,比较常用,流行的框架 uni-app,Chameleon(变色龙),taro这些,都可以支持多端,一套代码,8个平台支持。
  • 什么是JWT认证,PHP是如何实现JWT认证的?
    JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。
  • 统计在线人数,用php如何来实现 ?
    一个业务系统网站每天人数的访问量是多少,在线人数是多少?这种业务我们在开发中就要预留,也是在我们的设计范围内的咯!因为一个正在运营的网站,每天都会用到统计。
  • php中smart_str对比smart_string
    在阐述智能字符串之前,先看看其实现所依赖的基本结构smart_str与smart_string结构体的异同。
  • PHP如何快速导出百万级数据到EXCEL
    如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百万条数据为例,导出时间不过20秒,值得学习的一种大数据导出方式。
  • PHP上下分页功能的实现过程
    PHP上下分页功能以当前页码为基础,实现上一页和下一页的跳转,并且输出上一页中最后一条数据和下一页中第一条数据的内容。
  • php数据解析与分隔应用
    在项目开发中,难免会对各种数据进行解析分析。要求你抽取出数据的各个组成部分,从而判断整个数据是否满足业务需求,比如以下场景。
  • php如何在数组中查找值?
    如果想要查找一个值在数组中的位置,则可以使用array_search()函数进行。
  • PHP的一些安全设置,你都设置过没 ?
    PHP的安全设置包括:1、屏蔽PHP错误输出;2、屏蔽PHP版本;3、关闭全局变量;4、文件系统限制;5、禁止远程资源访问;
  • PHP7的抽象类和接口的介绍及应用
    抽象类和接口都是不能被实例化的特殊类,可以在抽象类和接口中保留公共的方法,将抽象类和接口作为公共的基类。
  • 网站制作 服务

    免费网站制作报价,免费优化,1对1服务,个性化定制服务

    pc和wap网站制作

    多年建站经验,上千个成功案例,
    为您提供一站式服务

    网站维护改版

    大厂经验工程师对现有网站进行
    改版,修复,维护。

    小程序制作

    微信小程序,支付宝小程序,
    百度小程序

    响应式网页设计

    响应式网页设计可以与多种设备兼容,
    如智能手机,平板电脑和PC