Twitch API,流URL

时间:2014-08-15 10:00:32

标签: android json api stream twitch

我已经开始了一个小型的android项目,其最后一个功能是观看抽搐流,但我遇到了挫折。我有红色的颤抖API,后来发现this post。我的想法如下:

- 获取特定游戏的抽搐拖缆列表。

- 点击列表中的元素后,打开流并播放。

在阅读了这两个来源之后,我使用arrayadapter创建了一个listfragment并使用了volley我从https://api.twitch.tv/kraken/streams?game =(MyGame)加载了响应。 例如:

https://api.twitch.tv/kraken/streams?game=League%20of%20Legends

我获得了25个顶级彩带的JSON响应并显示它们。这是我遇到问题的地方。我不知道如何获取流视频网址。

根据我的第二个链接获取不同的quiality流视频我必须:

1)从http://api.twitch.tv/api/channels/(CHANNELNAME)/ access_token

获取令牌

收到的回复看起来像这样:

{ token: "{"user_id":null,"channel":"riotgames","expires":1408096127,"chansub":{"view_until":1924905600,"restricted_bitrates":[]},"private":{"allowed_to_view":true},"privileged":false}",
sig: "c81dfc25b90d44ea107cdeae5371df28185bd0dd",
mobile_restricted: false
}

此响应有3个值:token,sig和mobile_restricted。

2)使用这个http://usher.twitch.tv/select/(CHANNELNAME).json?nauthsig =(SIG)& nauth =(TOKEN)& allow_source = true,我用这个填写字段json令牌回复

http://usher.twitch.tv/select/riotgames.json?nauthsig=c81dfc25b90d44ea107cdeae5371df28185bd0dd&nauth="{"user_id":null,"channel":"riotgames","expires":1408096127,"chansub":{"view_until":1924905600,"restricted_bitrates":[]},"private":{"allowed_to_view":true},"privileged":false}"&allow_source=true

,但我得到的回复总是:

[]

我的理解意味着该流不是直播?但与此同时,我可以看到流动。

我的问题是:如何获得具有不同品质的直播网址?我称他们的方式出了什么问题?

作为免责声明:我对任何类型的节目都非常陌生,所以我不会假装理解一切。我可能忽略了某些东西或明显错过了它。此外,我似乎无法发布超过2个链接,所以我在http之后添加了一个额外的空格。

编辑:在@rcxrdx的帮助下,我收到了我想要的回复。他指出的是我必须正确编码令牌。下面是一个编码网址的示例,用于接收具有所有视频质量的字符串响应:

http://usher.twitch.tv/select/reckful.json?segment_preference=2&player=twitchweb&nauth=%7B%22user_id%22%3Anull%2C%22channel%22%3A%22reckful%22%2C%22expires%22%3A1408897471%2C%22chansub%22%3A%7B%22view_until%22%3A1924905600%2C%22restricted_bitrates%22%3A%5B%5D%7D%2C%22private%22%3A%7B%22allowed_to_view%22%3Atrue%7D%2C%22privileged%22%3Afalse%7D&allow_source=true&type=any&nauthsig=b0e19347528f3675612d4c5d1a030bfa8d9ffb13

我失去了一些时间的东西是,如果你没有登录,当你收到访问令牌时,user_id将返回null。在大多数的例子中,例如博客文章中我添加了一个,不要明确说出来。所以,是的,如果有人想播放抽搐视频,层次结构如下:获取access_token,在编辑中按照我的示例形成网址,接收STRING(可能会说它的JSON但不是)响应,获取来自响应的视频质量,并使用VideoView使用以下行播放它们:

String myStream=response;
Uri uri = Uri.parse(myStream);
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();

2 个答案:

答案 0 :(得分:1)

你做得对,你唯一缺少的是你的令牌必须通过你选择的方法进行URL编码。

如果您想确保正确执行编码步骤,可以通过浏览器(使用wireshark或Chrome上的网络标签)观看您发送的请求,并确保您是发送相同的令牌。

答案 1 :(得分:0)

我不确定这会对你有多大帮助,但几个月前我正在使用twitch API工作我觉得很难但是能够让游戏搜索工作并引入流

希望这有助于我使用的代码

// Twitch Streams //参考:https://github.com/justintv/Twitch-API/blob/master/embedding.md

function getTwitch(title){
$.getJSON("https://api.twitch.tv/kraken/search/streams?q="+title+"&limit=20&type=top&callback=?", function (data) {
    var temp = "";

    $.each(data.streams.slice(0,5), function (index, item) {
        temp = temp + "<a target='frame1' href='http://www.twitch.tv/widgets/live_embed_player.swf?channel=" + item.channel.name + "'><button>"+item.channel.display_name+"</button></a><br />";
    });
    $("#StreamList").html(temp);
});
}

这是一个使用原始api代码构建的示例jsfiddle,我将其用作跳跃点,但上面的代码是我使用的最终代码

http://jsfiddle.net/F4tsM/10/