【问题标题】:Twitch API, Stream URLTwitch API,流 URL
【发布时间】:2014-10-09 01:55:00
【问题描述】:

我已经开始了一个小型 android 项目,它的最后一个功能是观看 twitch 流,但我遇到了挫折。我红了抽搐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 响应并显示它们。这是我遇到问题的地方。我不知道如何获取流视频 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();

【问题讨论】:

    标签: android json api stream twitch


    【解决方案1】:

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

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

    【讨论】:

    • 我不想问,但你能详细说明一下吗?如果你有时间,你能给我举个例子吗?这是我不明白且在其他地方找不到答案的内容:-“URL 编码”是什么意思?我在 url 示例中填写了缺失的部分。至于wireshark,我在某处看到它并安装了它,但由于我非常缺乏经验,我几乎不知道要寻找什么。我使用了这个过滤器: http.request.uri 包含 twitch 。我得到了一些结果,但我不确定如何解释它们,因为它们与上面的示例有很大不同。
    • /select/trumpsc.json?type=any&p=1903171&private_code=&segment_preference=2&player=twitchweb&nauth=%7B%22user_id%22%3A47958526%2C%22channel%22%3A%22trumpsc%22%2C% 22expires%22%3A1408400876%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&nauthsig=7d7bbf4ba062914488f15820f83bc0184be9f349 HTTP/1.1 这是我在使用上述过滤器时从 twitch 得到的响应。或者至少这是我认为响应中必不可少的?
    • 你得到了这里最重要的东西,它是你在加载流时发送的选择请求,与你试图复制的请求相同。它由几个不同的元素组成,其中一些是不必要的,正如您之前所见,您需要“nauth”和“nauthsig”才能获得流 URL 的答案。
    • 这里,在您捕获的请求中: nath = %7B%22user_id%22%3A47958526%2C%22channel%22%3A%22trumpsc%22%2C%‌22expires%22%3A1408400876%2C %22chansub%22%3A%7B%22view_until%22%3A1924905600%2C%2‌2restricted_bitrates%22%3A%5B%5D%7D%2C%22private%22%3A%7B%22allowed_to_view%22%3A‌​true%7D%2C %22privileged%22%3Afalse%7D nauthsig = 7d7bbf4ba0629144‌​88f15820f83bc0184be9f349 在 nath 字段中,您应该输入您之前获得的令牌,但正如您所看到的不同,特殊字符已替换为“%X”和 X是他们的十六进制编码。这个过程就是 URL 编码。
    • 如果你做同样的事情,并最终发送相同的请求,你将获得 URL,就像你的浏览器接收它们一样。因此,您可以检查您发送的内容,是否编码正确,是否没有出现转义字符(“\”)或任何其他原因导致您没有发送正确的令牌
    【解决方案2】:

    我不确定这对你有多大帮助,但几个月前我正在使用 twitch API 工作,我发现它非常困难,但能够让游戏搜索正常工作并引入流

    希望对我有帮助的是我使用的代码

    //抽搐流 //参考: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/

    【讨论】:

    • 是的,我也找到了类似的代码示例。但是我使用搜索功能得到的响应对我没有多大帮助。它不包含实际流链接的标签(或者至少我看不到/理解它)。它提供与我使用的列表类似的信息(缩略图、观众人数、频道链接、流媒体等)。第二个链接仅用于嵌入流。不过,感谢您抽出宝贵时间。
    • 对不起,我不能提供更多帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多