我已经开始了一个小型 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();