1

我已经开始了一个小型 android 项目,它的最后一个功能是观看 twitch 流,但我遇到了挫折。我有红色的 twitch API,后来发现了这篇文章。我的想法如下:

- 获取特定游戏的抽搐流媒体列表。

- 当单击列表中的一个元素时,打开流并播放。

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

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

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

根据我获得不同质量流视频的第二个链接,我必须:

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 的帮助下,我得到了我正在寻找的回复。他指出的是我必须正确编码令牌。以下是用于接收具有所有视频质量的字符串响应的编码 url 示例:

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。在大多数示例中,例如我添加到顶部的博客文章中的示例,请不要明确说明。所以是的,如果有人想播放 twitch 视频,层次结构如下:获取 access_token,按照我在编辑中的示例形成 url,接收 STRING(它可能会说它是 JSON,但它不是)响应,从响应并使用 VideoView 通过以下几行播放它们:

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

2 回答 2

1

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

如果您想确保正确执行编码步骤,您可以通过浏览器(使用wireshark或Chrome上的“网络”选项卡)查看您在连接到流时发送的请求,并确保您发送的是相同的令牌。

于 2014-08-18T19:47:59.497 回答
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/

于 2014-08-15T14:59:23.500 回答