前言
前段阵子才刚刚接入越南版游戏准备上线了,接踵而来的便是韩国版本游戏的接入.不巧,直播平台从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上提提自己的疑问,说不定我们遇到的问题别人很早就碰到了,而这时候只要自己有耐性至少可以帮我们少走很多弯路.
参考资料