公司新下来了一个需求,为了让更多的企业hr在线看我们公司的“hr沙龙培训活动”(之前一直是到现场听),于是购买了网易云的直播服务,做一个在线直播观看的活动。

购买完成后,输入账号密码,在后台应用中创建我们自己的应用。在创建的应用中,我们手动创建自己的直播频道(这个是可以通过接口用代码完成,我们之所以手动创建,因为我的得推流入口就几个,也是固定的,所以就省了一点力)。如果要用接口来创建,就需要进行接口鉴权。文档上给出的是java示例,我这里给出我的PHP示例,供参考。

<?php
 
class Classwangyiyunzhibo{
    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);
    }

/*****file_get_contents()post请求******/
    public function postDataCurl($url='https://vcloud.163.com/app/channellist',$data=array()){
        $this->checkSumBuilder();        //发送请求前需先生成checkSum

if(!empty($data)){
            $data = json_encode($data);
        }else{
            $data = "";
        }

$options = array(  
            'http' => array(  
            'method' => 'POST', 
           'header' => "Content-Type: application/json;charset=utf-8\r\n"."AppKey:".$this->AppKey."\r\n"."Nonce:".$this->Nonce."\r\n".
            "CurTime:".$this->CurTime."\r\n"."CheckSum:".$this->CheckSum."",
            'content' => $data,
            'timeout' => 500,
            )  
        );
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        return json_decode($result,true);
    } 
  
    /*****curlpost请求******/
    // public function postDataCurl($url,$data=array()){
    //     $this->checkSumBuilder();        //发送请求前需先生成checkSum
    //     if(!empty($data)){
    //         $json=json_encode($data);
    //     }else{
    //         $json="";
    //     }
    //     $timeout = 5000;  
    //     $http_header = array(
    //         'AppKey:'.$this->AppKey,
    //         'Nonce:'.$this->Nonce,
    //         'CurTime:'.$this->CurTime,
    //         'CheckSum:'.$this->CheckSum,
    //         'Content-Type: application/json;charset=utf-8;',
    //         'Content-Length: ' . 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));
    }
     
    /****获取某一时间范围的录制视频文件列表*****/
    public function app_vodvideolist($cid,$beginTime,$endTime){
        $url="https://vcloud.163.com/app/vodvideolist";
        return $data=$this->postDataCurl($url,array("cid"=>$cid,"beginTime"=>$beginTime,"endTime"=>$endTime));
    }

/****设置视频录制回调地址*****/
    public function record_setcallback($recordClk){
        $url="https://vcloud.163.com/app/record/setcallback";
        return $data=$this->postDataCurl($url,array("recordClk"=>$recordClk));
    }

/****设置回调的加签秘钥*****/
    public function callback_setSignKey($signKey){
        $url="https://vcloud.163.com/app/callback/setSignKey";
        return $data=$this->postDataCurl($url,array("signKey"=>$signKey));
    }

/****录制文件合并*****/
    public function video_merge($outputName,$vidList){
        $url="https://vcloud.163.com/app/video/merge";
        return $data=$this->postDataCurl($url,array("outputName"=>$outputName,"vidList"=>$vidList));
    }
}

?>

这里实例化的时候需要传入网易云后台分配的Access Key,Access Key拥有所有接口的访问权限.

在我的这个示例里,我给出了两种请求方式,一种file_get_contents()post请求,一种curl的请求方式,我们使用的是前者,因为我们的curl在服务器中一直没有打开,运维给出的理由是不安全。

有了上面这个示例,我们就可以开心的调用网易云提供的所有接口为所欲为了,我们直播的视频也可以录制下来,可以做一个回看功能,让没看到直播的用户进行回看。这个功能很不错,想象的空间很大,可是我的基本功能都做好了,这个功能最后被砍了,不过在这里我也要介绍一下。

在前台直播页面可以说是非常简单的,只需要前端做好页面,把网易云直播提供的js和html代码引入就可以了,不做任何处理就是一个黑窗口,播放窗口上的各种操作,可以默认,也自己定制处理,看业务需求。

我们的直播信息都是在crm后台录入好的,在前台取出当期的数据就可以了。在前台播放需要一个拉流地址,这个在我们创建的频道里面,可以通过接口获取。拉流地址有三个,分别兼容不同的模式,因为我们的需求要求用户用手机访问时也能观看,所以这个也解决了在移动端的兼容性问题,拉流地址有http,hls,rtmp三个模式,我们也不需要判断用户使用的是移动端还是PC端进行观看,我们可以把这三个模式全部写出来,因为网易云直播的播放有一个功能就是检测如果第一个地址不能播放,就依次向下检测其他的播放地址。

有拉流就有推流,推流也很简单,我们可以用网易云提供的demo,只需要把推流地址输入就可以,可以同时利用摄像头直播和直播电脑页面上的操作,两个图像可以叠加在窗口上,自己可以设置窗口的大小。

在直播的时候,我们可以对频道开启录制功能,可以在网易云后台手动开启,也可以利用接口开启。录制好的视频自动保存在网易云后台,可以通过接口获取,我们也可以在后台上传我们自己的视频,也是可以获取到,录制的视频默认格式是flv。

我们这个直播项目只是一个简单的教学直播,没有互动,弹幕的环节,如果你想做这样的直播,那就要购买网易云的另外一个服务了,叫做互动直播,这个功能就很强大了。(完)

如何利用网易云直播的接口做一个直播项目相关推荐

  1. JAVA网易云热评接口_网易云音乐热评爬虫(一): 反编译加密参数

    由于网易云音乐大部分请求做了混淆加密处理,因此直接用requests请求是行不通.本文以获取歌曲全部评论为例,通过分析网易云的加密过程,来反编译构造加密参数.下面主要介绍下用Python实现加密参数的 ...

  2. iOS动手做一个直播app开发(代码篇)

    iOS动手做一个直播app开发(代码篇) ###开篇 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量都不错的文 ...

  3. 直播网站源码直播平台软件开发iOS动手做一个直播(原理篇)

    直播网站源码直播平台软件开发iOS动手做一个直播(原理篇) 上篇文章主要给出了代码,但是并没有详细说明直播相关的知识,这篇文章就说一下直播的相关理论知识.附上直播代码篇地址. ###推流 腾讯直播平台 ...

  4. 利用python加上ffmpeg,ffmpy,做一个音视频格式转换器

    利用python加上ffmpeg,可以做一个简单的音乐或者视频格式转换器. 可以利用PyQt5做界面,本例中比较简单: 流程非常简单,点击"选择源文件",选取要转换的音频或者视频文 ...

  5. uniapp使用网易有道词典接口做一个背单词小程序-单词发音-有道词典接口-不用注册token直接发请求

    uniapp使用网易有道词典接口做一个背单词小程序(不用注册token直接发请求) uniapp使用网易有道词典接口做一个背单词小程序-单词发音-有道词典接口 用到的接口: *1.获取单词发音(goo ...

  6. 如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...

    系列文章 如何使用PaddleDetection做一个完整项目(三) 该文章是PaddleDetection的完结篇,请参考之前两篇文章 https://zhuanlan.zhihu.com/p/10 ...

  7. 获取网易云音乐开放接口api的推荐歌单

    网易云音乐开放api接口 网址:https://binaryify.github.io/NeteaseCloudMusicApi/#/?id=neteasecloudmusicapi 项目地址:htt ...

  8. Python爬取网易云歌曲评论,做词云分析

    前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块 ...

  9. 网易云音乐API接口

    引用: (102条消息) 调用网易云api接口_一纸斜阳一纸梦的博客-CSDN博客 网易云音乐官方搜索接口 - 安生子-AnSheng (aszi.cn) 增加:MyFreemp3音乐搜索 - 这是一 ...

最新文章

  1. tiny210V2 Uboot kernel filesystem 烧写和启动
  2. 埃森哲:技术改变看病的五大趋势!每个人都将受益【附下载】| 智东西内参...
  3. Java压缩html
  4. 怎么设置分组变量_GraphPad Prism 绘图教程 | 手把手教你绘制Grouped(分组)散点图...
  5. CSS的三种定位,成功入职字节跳动
  6. 推荐一款自动化代码变量命名在线工具
  7. centos将某一目录权限给用户_centos7如何新建普通权限用户,仅能访问指定目录,使用gcc?...
  8. ORACLE常用函数汇总
  9. C#技术分享【PDF转换成图片——10种方案】(2013-07-25重新整理)
  10. Freeimage-3.18.0编译(静态库)
  11. 单点登录原理与简单实现
  12. 电脑4g内存C语言CAD够用吗,电脑4g内存够用吗-电脑4g内存是否够用详情介绍 - 系统家园...
  13. google输入法 日文 [CapsLock]キー ひらがな⇔直接入力の設定
  14. ssh pem登陆及pem是什么
  15. PLC实验:定时器/计数器功能实验
  16. Java写计算器自闭了
  17. 播放器地址抓取 php,PHP实现使用优酷土豆视频地址获取swf播放器分享地址
  18. Python面向对象编程(类编程)中self的含义详解(简单明了直击本质的解释)
  19. 优秀!华为诺亚方舟实验室联合中山大学发布新一代半/自监督的2D基准数据集SODA10M
  20. Xcode - 使用 DWURecyclingAlert 进行 UITableView 和 UICollectionView 的绘图性能测试https://viktyz.gitbooks.io/ios

热门文章

  1. 图数据库实操:用 Nebula Graph 破解成语版 Wordle 谜底
  2. easyExcel设置最后一行的样式【可以拓展为每一行】
  3. 中国书信礼仪 (三)
  4. Java试用两个月,我快被劝退了
  5. JS+CSS实现页面滚动切换图片(从边角扩散)的效果
  6. 很多男性的瘦腰细腿比女性更骨感?原因告诉你,或许他们真没减肥
  7. 强化学习 蒲丰投针实验 蒙特卡洛算法
  8. Linux、Windows网络工程师面试题精选
  9. 【Javascript】二十个工具函数
  10. 图片怎么在线转换成PDF格式