youtube直播sdk嵌入的使用

前言

前段阵子才刚刚接入越南版游戏准备上线了,接踵而来的便是韩国版本游戏的接入.不巧,直播平台从twitch切换到youtube上去了.更让我们摸不着头脑的是,对方派出一个商务和我们对接游戏,youtube平台直播方面直接扔来一个直播频道.剩下需要自己来处理,感觉有谷歌这个大厂抱抱大腿心理多多少少还是有些安慰的.

主要的接口查询

这里借助谷歌关于youtube的api帮我们解决关于直播与推流数据的获取.作为youtube的用户,每个用户都可以在youtube平台申请直播.申请后会自动分配一个频道,用户的直播地址可以由其频道编号来表示.而我们能做的就是想方设法将带有频道的直播地址转为视频地址,从而通过获取视频流的形式获取直播推流.

频道

每个youtube用户都可以根据自己的需求申请不同的直播类型,而该直播地址可以用其频道编号来表示.

视频

用户申请直播之后可以拿到相应的直播地址,这里我们需要通过调用谷歌的api获取其相应的视频地址,然后需要事先生成授权key.
需要调用谷歌关于的api,将直播地址转为视频地址.通过调用https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={channelId}&eventType=live&type=video&key={key}的返回值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function getVideoInfoDetail($channel){
$arrGetVideoLiveInfoDetailWhere = array(
"part" => "snippet",
"channelId" => $channel,
"eventType" => "live",
"type" => "video",
"key" => $this->arrConfigSDK['keyApp'],
);
$urlGetVideoInfoDetail = $this->urlVideoBase."?".http_build_query($arrGetVideoLiveInfoDetailWhere,NULL,"&");
$arrGetVideoInfoDetail = json_decode(file_get_contents($urlGetVideoInfoDetail),true);
if(array_key_exists("items",$arrGetVideoInfoDetail)){
$arrItemVideoInfo = $arrGetVideoInfoDetail['items'];
$arrItemVideoInfo = reset($arrItemVideoInfo);
$arrVideoInfo = array(
"id" => isset($arrItemVideoInfo['id']['videoId']) ? $arrItemVideoInfo['id']['videoId'] : "",
"snippet" => isset($arrItemVideoInfo['snippet']) ? $arrItemVideoInfo['snippet'] : array(),
);
}
return empty($arrVideoInfo) ? array() : $arrVideoInfo;
}

直播流

获取视频的直播流相对而言也比较简单,需要调用谷歌的api即可.http://www.youtube.com/get_video_info?video_id={video_id}.
因为调用谷歌的api之后返回的是一串键值对形式组成的字符串,需要用parse_str转为数组.

1
2
3
4
5
6
7
8
9
10
11
12
function getUrlLiveInfoDetail($channel){
$arrVideoInfo = $this->getVideoInfoDetail($channel);
if(!empty($arrVideoInfo) && is_array($arrVideoInfo)){
$arrGetLiveInfoDetailWhere = array(
"video_id" => $arrVideoInfo['id'],
);
$urlGetLiveInfoDetail = $this->urlLiveBase."?".http_build_query($arrGetLiveInfoDetailWhere,NULL,"&");
$strGetLiveInfoDetail = file_get_contents($urlGetLiveInfoDetail);
parse_str($strGetLiveInfoDetail,$arrGetLiveInfoDetail);
}
return empty($arrGetLiveInfoDetail) ? array() : $arrGetLiveInfoDetail;
}

乱七八糟

最近真的有点忙,不过一切看起来也不会想象的那么糟糕.经过之前两个月的折腾,终于还是勉强的搞定了越南代理商的”纠缠”.韩国代理商最近催促得比较紧,公司目前的项目正在加紧完成11版本功能的最后测试和修复,所以就有很多的事情都集中在这一周要完成.然后,自己又报名参加了厦门马拉松赛事,幸运的是让我都中签了,所以我也正在准备赛前的准备.国庆后,报名参与了考驾照的茫茫大军中,考试复习也是不可或缺的.看着周边有些同学重回校园了却当年未了的梦想,我又岂能放弃呢?若是能鼓起了最后的勇气,抱着最后的希望一头扎向书海或许也不错.于是,我差点就报名2016年研究生入学考试,思来想去了好久果断放弃,现在想想还真的蛮明智的了.算了,周末还要参加软考但书还没看,但怎么说我也不能像以前一样肆无忌惮的通宵熬夜.怯怯生的,赌上最后的一丝希望多喝上几杯水.希望明天能让尿憋醒,这样我就能睡其自然的早起了,你们都可以光明正大的嘲笑我吧,哈哈.

总结

有时候对一件事情如果一时间想破头还是没有思路的话,不妨先搁置一段时间可能效果会更好.遇到技术难关或者在关键时候遇到瓶颈,可以去github上借鉴下大神们是以怎样的思路去解决同样的问题.也可以去stackoverflow上提提自己的疑问,说不定我们遇到的问题别人很早就碰到了,而这时候只要自己有耐性至少可以帮我们少走很多弯路.

参考资料

文章目录
  1. 1. 前言
  2. 2. 主要的接口查询
    1. 2.1. 频道
    2. 2.2. 视频
    3. 2.3. 直播流
  3. 3. 乱七八糟
  4. 4. 总结
  5. 5. 参考资料
,