直播平台直播API集成之twitch篇

news2024/9/20 0:21:38

前言:
    本篇我们来介绍如何使用twitch的直播API创建直播。
准备工作:
1、你首先得有个twitch账号;
2、创建twitch应用,主要是给自己的应用取名并配置授权回调地址(可配多个),如下图所示:

在这里插入图片描述

3、先拉起用户授权页面并获得具有直播API操作权限的token后即可调用twitch直播API或者你自己对twitch直播API的后台封装,授权流程我可以细说一下,这里以网站应用类型举例:
授权时帮用户拉起twitch授权页:
https://id.twitch.tv/oauth2/authorize?response_type=code&client_id=你的应用ID&redirect_uri=你的授权回调地址&scope=channel%3Aread%3Astream_key%20channel%3Amanage%3Aschedule&state=c3ab8aa609ea11e793ae92361f002671
然后用户就能看到授权页面:

在这里插入图片描述

    用户授权之后前端即可在授权回调页面地址后得到授权码code,之后便可以调用后台封装的接口通过code得到用户的access_token去访问API了,通过code获取token也给大家给出示例:

private Map<String, Object> getTwitchToken(String code) {
        String url = "https://id.twitch.tv/oauth2/token?grant_type=authorization_code";
        url = url + "&code=" + code;
        url = url + "&redirect_uri=" + twitchApiUtils.getRedirectUri();
        url = url + "&client_id=" + twitchApiUtils.getClientId();
        url = url + "&client_secret=" + twitchApiUtils.getClientSecret();
        String resultStr = HttpUtils.post(url, "{}", null);
        log.info("[getTwitchToken] result str:[{}].", resultStr);
        JSONObject jsonObject = JSON.parseObject(resultStr);
        HashMap<String, Object> result = new HashMap<>();
        result.put("access_token", jsonObject.getString("access_token"));
        result.put("refresh_token", jsonObject.getString("refresh_token"));
        result.put("expires_in", jsonObject.getLongValue("expires_in"));
        result.put("token_type", jsonObject.getString("token_type"));
        return result;
    }

直播API封装:
    代码部分使用JAVA语言实现(代码只提供主流程代码),先附上twitch直播API的官方文档。
首先获取twitch直播地址:
twitch的直播推流地址实际上就是"rtmp://sfo.contribute.live-video.net/app/" + streamKey,所以获取到streamKey就相当于得到了直播推流地址了,获取streamKey的API需要传参broadcast_id参数(在twitch中等同于你的twitch账号用户ID),所以我们先获取broadcast_id:

Map<String, String> header = new HashMap<>();
        String authorization = "Bearer " + twitchToken;
        header.put("Authorization", authorization);
        header.put("Client-Id", twitchApiUtils.getClientId());
        String url = "https://api.twitch.tv/helix/users";
        String resultStr = HttpUtils.get(url, header);
        log.info("[RtmpManageServiceImpl.getTwitchLiveUrl] result str:{}.", resultStr);
        JSONObject object = JSON.parseObject(resultStr);
        String broadcastId = object.getJSONArray("data").getJSONObject(0).getString("id");// 用户ID即为broadcast_id

然后就可以调用接口获取一个streamKey:

 url = "https://api.twitch.tv/helix/streams/key?broadcaster_id=" + broadcastId;
        resultStr = HttpUtils.get(url, header);
        log.info("[RtmpManageServiceImpl.getTwitchLiveUrl] result str:{}.", resultStr);
        object = JSON.parseObject(resultStr);
        String streamKey = object.getJSONArray("data").getJSONObject(0).getString("stream_key");
        String rtmpUrl = "rtmp://sfo.contribute.live-video.net/app/" + streamKey;// 这就是最终的直播推流地址

至此就获取到twitch的直播推流地址了。
但是想要用户看到你的直播活动通知,还需要调用接口创建一个直播事件通知:

url = "https://api.twitch.tv/helix/schedule/segment?broadcaster_id=" + broadcastId;
        Map<String, Object> data = new HashMap<>();
        data.put("start_time", date);// 直播开始时间
        data.put("timezone", params.getTimezone());// 时区
        data.put("duration", "480");// 持续时间,单位分钟
        data.put("title", title);// 标题
        data.put("is_recurring", true);// 是否周期重复
        JSONObject jsonObject = new JSONObject(data);
        String jsonStr = jsonObject.toString();
        resultStr = HttpUtils.postWithHeader(url, jsonStr, header);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ae基础概念与界面讲解

目录 Ae软件的用途 Ae界面介绍 预设 界面介绍 首选项概念 导入与导出 Ae软件的用途 Ae是一款专业特效合成软件&#xff0c;通过对收集到的素材进行数字化的编辑组合到一起&#xff0c;进行艺术性的再加工后得到的最终作品。 Ae界面介绍 画面中最显眼的图标是新建合成&am…

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间&#xff1a;22 Dec 2023 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位&#xff1a;Google DeepMind Motivation&#xff1a;受视觉和语言基础模型的最新进展的启发&#xff0c…

第三十九篇-TeslaP40+CosyVoice-安装

环境 系统&#xff1a;CentOS-7 CPU: 14C28T 内存&#xff1a;32G 显卡&#xff1a;Tesla P40 24G 驱动: 535 CUDA: 12.2克隆 git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git cd CosyVoicegit submodule update --init --recursive下载 Matcha-TTS cd…

DWF 支持的 TON 链 Telegram 免费宠物游戏 Gatto_game,推出 “Paws Up! 世界锦标赛”

TON 链在这轮牛市里无疑是一匹脱缰的黑马&#xff0c;创造了一个又一个爆款&#xff0c;为持有者带来了不菲的收益。 Gatto_game 是一款 TON链 Tamagotchi 电子宠物风格的 P2E web3 游戏。可以通过喂养升级&#xff0c;参加比赛赚取 $TON 或者 $GTON &#xff0c;或许就是下一个…

四大名著改编的ip大作,一个巨亏2亿,一个狂赚20亿!选择决定成败!

最近讨论热度比较高的当属《红楼梦》和《西游记》了 胡玫导演的《红楼梦之金玉良缘》耗费了18年的心血&#xff0c;投资了2个多亿 却仅仅只有600万票房&#xff0c;还被网友调侃称“一黛不如一黛” 而由《西游记》改编的游戏《黑神话悟空》&#xff0c;研发10年投资6亿&…

如祺出行发布首份中期业绩,总收入增长13.6%

8月28日&#xff0c;如祺出行发布2024年中期业绩公告。这是如祺出行于7月10日在港交所主板上市后发布的首份业绩公告。 业绩公告显示&#xff0c;2024年上半年如祺出行收入实现10.37亿元&#xff08;单位&#xff1a;人民币&#xff0c;下同&#xff09;、同比增长13.6%&#x…

Avalonia与WPF开发时的差异总结

1.一个控件绑定到另外一个控件的属性 WPF: <TextBox Height"30" Width"100" x:Name"tb"></TextBox><TextBlock Text"{Binding ElementNametb,PathText}" ></TextBlock>Avalonia: <TextBox Height"3…

梯度下降法求解线性回归

文章目录 线性回归损失函数平均绝对误差&#xff08;MAE&#xff09;均方误差&#xff08;MSE&#xff09; 最小二乘法最小二乘法代数推导最小二乘法矩阵推导 线性回归 Python 实现线性回归 scikit-learn 实现 梯度下降法梯度下降法的原理 梯度下降法求解线性回归 线性回归 线…

Java SpringBoot实战:如何构建学生档案管理系统实现信息管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

【ocr识别003】动物检疫合格证明单据OCR识别应用案例(已更新)

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 2.了解、学习OCR相关技术知识领域,结合日常的场景进行测试、总结。如本文的实践:以动物检疫合格证明单据识别为例,探索OCR文本推理应用示例场景。 3.有其他场景问题,欢迎留言或加微沟通。 文章目录 1.简要介绍2.`O…

【Qt窗口】—— 状态栏

目录 1.1 状态栏的创建 1.2 在状态栏中显示实时消息 1.3 在状态栏中显示永久消息 状态栏是应用程序中输出简要信息的区域。⼀般位于主窗口的最底部&#xff0c;⼀个窗⼝中最多只能有⼀个状态栏。在Qt中&#xff0c;状态栏是通过QStatusBar类来实现的。在状态栏中可以显示的消…

Navicat Premium 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开工具对话框2. 设置编辑器字体大小3. 设置查询表格字体大小 前言 Navicat Premium 自定义字体大小&#xff0c;统一设置为 Cascadia Code SemiBold &#xff0c;大小为 12 具体操作 【工具】>【选项】>【编…

内网渗透小知识

下载proxychains这个工具 在下面这里进行代理配置 然后再里面添加内网端口。在设置浏览器的代理&#xff0c;就可以通过内网访问内网资源 然后在浏览器中设置&#xff0c;设置socks后可以访问很多。 如果映射http的话只可以访问一个 然后如果在内网扫描不了IP的话使用上面的代…

AGI系列(8)零门槛信息抓取利器打造,免费自动化抓取推特上的热点内容

应该大家都或多或少的听说过 X/Twitter。它可不只是个普通的社交平台&#xff01;它还是个信息宝库&#xff0c;里面有各种有趣的内容&#xff0c;比如&#xff1a;想知道最新热点&#xff1f;想和全世界的人聊天&#xff1f;Twitter都能搞定&#xff01;它的搜索功能特别厉害&…

测试职场经验 | 缺陷如何分类

说到bug&#xff0c;大家可能更多的认为是错误&#xff0c;有问题的地方&#xff0c;但是它的原意是”臭虫”,是不是有了新的发现&#xff01;而真正找出电脑程序中第一个bug的女程序员&#xff0c;来自于计算机软件第一夫人&#xff1a;Grace Hopper&#xff0c;一次”意外”的…

取模+背包

前言&#xff1a;一开始我想错了&#xff0c;一开始我想的是直接统计每一项模完后的和&#xff0c;我们只要能够取到一半&#xff0c;那么就有解&#xff0c;但是时间复杂度太大了 我们做推导 x y s u m x y sum xysum x − y k ∗ n x - y k * n x−yk∗n 那么我们可…

pikachu靶场通关攻略(XSS)(1~10关)

反射型xss(get) 步骤一&#xff0c;我们先打开网站&#xff08;第一关&#xff09; 步骤二&#xff0c;首先来到第一关我们先随便输入一个数字1&#xff0c;下边显示谁是1&#xff0c;我不在乎! 步骤三&#xff0c;输入代码&#xff1a;<script>alert(1)</script>…

Codeforces Round 966 (Div. 3) A~F

A.Primary Task&#xff08;模拟&#xff09; 题意&#xff1a; 德米特里在黑板上写下了 t t t个整数&#xff0c;这很好。他肯定自己丢失了其中一个重要的整数 n n n&#xff0c;这就不好了。 整数 n n n的形式是 10 10 10 ^ x x x( x ≥ 2 x\ge 2 x≥2)&#xff0c;其中符…

数字签名:信息安全的新屏障

随着互联网的普及和信息技术的发展&#xff0c;信息安全问题日益凸显。数字签名作为一种重要的信息安全技术&#xff0c;为电子数据传输提供了有效保障。本文将介绍数字签名的基本原理、应用场景及其在保障信息安全方面的作用。 一、数字签名概述 数字签名是一种基于公钥密码…

深度学习基础—卷积运算

1.1.卷积运算法则 在计算机视觉领域&#xff0c;卷积运算撑起了半边天&#xff0c;因此在学习计算机视觉前&#xff0c;首先来了解一下卷积运算是如何运算的。 假设正在进行边缘检测&#xff0c;垂直边缘检测会把图片中接近垂直的边缘提取出来&#xff0c;即人的侧边、栏杆等。…