第三方服务-阿里云直播
本文根据阿里云文档自己又总结了一下
以下步骤如果没说不是必须,那么就是必须的步骤,不可跳过
1.创建2个域名**
在阿里云控制台下的【直播控制台】,一定要注意,这里是【直播控制台】,而不是其他控制台,然后再找到直播控制台下的【域名管理】,在右侧你一定能找到【添加域名】这个按钮,添加两个域名,添加域名的时候,注意会让你选择一个业务类型,这两个域名,一个选择推流,一个选择播流
前提是我必须要有一个自己的域名,假设我现在拥有的这个域名是:shiwentian.cn
假设我创建的推流子域名是:push.shiwentian.cn
假设我创建的播流子域名是:pull.shiwentian.cn
你可以理解成:推流用于主播,而播流(拉流)用于粉丝,主播把视频流推到服务器,粉丝观看视频的时候从服务器拉视频流
2.给播流域名绑定推流域名
好了,创建完删除两个域名之后,接下来,要将这两个域名进行相互绑定,更准确的说是要将刚才创建的拉流,绑定刚才创建的推流(可以绑定多个推流)
直播控制台->域名管理:此时右侧会显示出域名列表,每一个域名占一行,找到刚才添加的类型是播流的那个域名的行,该行最后有一个叫【域名配置】的按钮,点击之后,右侧出现三个tab页,分别是基础信息,推流信息,播放信息,然后点击【推流信息】,再点击【添加推流信息】或者【未配置】两个按钮任意一个,会弹出一个下拉框,下拉框中,选择刚才的推流域名
3.设置推流回调地址**(不是必须的)**
当直播开始时候,阿里云会调用该回调地址,以便通知你的服务器
4.对推流和播流设置CNAME
在直播控制台域名列表,你会发现有一列叫CNAME,而且前面有个红色感叹号,这说明你还没有配置CNAME
去阿里云域名控制台,注意此处是域名控制台,而不是刚刚的直播控制台,选择【域名列表】,选择推流或播流所属的域名(本文事例中是shiwentian.cn),点击【解析】,在新弹出的界面点击【添加记录】
在记录类型中,选择 CNAME
主机记录中输入二级域名,如果推流域名是push.shiwentian.cn,那你应该填写push,如果推流域名是abc.shiwentian.cn,那么你应该填写abc
解析线路:不用填写,它会默认一个
记录值:就是直播控制台域名列表CNAME那一列,截止到文章发表,该格式类似xxx.xxxx.xxx.w.alikunlun.net
TTL:不用填写,它会给一个默认值
注意:推流和播流都要按照本步骤设置
5.配置鉴权(鉴权是默认开启的,所以需要配置,如果想关闭鉴权,则需要提交工单,不是自己可以随便关闭的)
5.1推流
先说主播,主播一边录制视频,肯定要一边往一个地址上推流,而另外一个主播,也肯定要推流,这两个主播要各推各的,那么这个推流地址应该如何获得呢?
直播控制台->域名管理->选择推流主域名(这个域名是你上述步骤中自己建的)->点击后面的"域名配置"->访问控制->URL鉴权->找到一个叫主key的值
根据阿里文档的规则,创建推流链接的java代码如下
String APP_NAME = "随便写,表示你项目的名字";
String PUSH_KEY = "上述截图中的主KEY";
// 你的推流域名,在本文中是push.shiwentian.cn,但是要注意前面需要加rtmp://
// 如果你这里不加,那么最终生成的推流链接的时候,你也要加,反正在哪加都一样
String PUSH_DOMAIN = "rtmp://push.shiwentian.cn";
String userId = "当前推流ID,你也可以认为是主播ID,用户ID,都可以";
// 创建时间戳,注意此处是1970到当前的秒数,而不是毫秒数
String nowMilli = String.valueOf(Instant.now().toEpochMilli() / 1000);
// 构建字符串,必须按照这个规则构建,阿里云文档就是这么规定的
// 注意-0-0-,第一个0表示随机数,我这里写0,你也可以写0,我个人觉得不要自己给自己找麻烦,直接写0就挺好了
// 第二个0在阿里云官方文档中定义的名字叫uid,官方说暂时没使用,直接设置0即可
String str = "/" + APP_NAME + "/" + userId + "-" + nowMilli + "-0-0-" + PUSH_KEY;
// 把上面的字符串,使用md5-32位加密,实例中我使用的Md5PasswordEncoder是SrpingSecurity的类,所以你要想用我这个,就应该引用SrpingSecurity包,但是你要注意,如果你的web项目引用了SrpingSecurity,那么在启动的时候它会在控制台打印出一个密码,你可以在配置文件中配置不需要这个密码校验,否则(我记得是,很久以前了),你的每个请求都需要输入这个密码,对于其他接口的调试很不方便,当然,你也可以使用任何MD5加密方式
Md5PasswordEncoder md5 = new Md5PasswordEncoder();
String authKeyMd5 = md5.encodePassword(str, "");
// 推流链接
String domain = PUSH_DOMAIN + "/" + APP_NAME;
// 串流密钥(注意这个字念yue,而不是yao,程序员文盲多,没办法)
// 无论在任何领域,这个字就念yue,没文化请不要出来丢脸,谢谢
String streamKey = userId + "?auth_key=" + nowMilli + "-0-0-" + authKeyMd5;
System.out.println(domain);
System.out.println(streamKey);
获取到domain和streamKey之后,之后推流的事儿,本质上和后端程序员没有什么关系了,因为是前端需要这两个东西,当然,我们写完了之后肯定需要自己测试一下,是否能成功推流,根据阿里云官方文档视频直播 > 用户指南 > 推播流配置 > PC端推流与播放(本文20200714该链接有效)介绍,它建议我们下载PC端推流工具,名字叫OBS,自己测试,这个推流工具的地址是这里,你需要在推流工具的:文件->设置->推流,中找到"服务器"与"串流密钥",如下图
将domain的值写到服务器位置,将streamKey写到串流密钥中,保存之后推流即可
关于OBS这个工具,我个人没有用明白,只是能推流就行了,当推流之后,你会在阿里云直播控制台->流管理->在线流,中能看到当前正在的直播
5.2播流(拉流)
可以认为播流就是粉丝端,当主播在直播的时候,粉丝需要看直播,此时就需要从阿里云服务器进行拉流操作
获取拉流的规则和推流基本是一样的,至于不同的地方,先说第一个不同点,就是获取拉流key
直播控制台->域名管理->选择你的拉流主域名(不是推流)->点击后面的"域名配置"->访问控制->URL鉴权->找到一个叫主key的值,如下图(和上述推流的KEY不是一个)
至于其他不同的地方,代码注释中有介绍,下面是获取拉流链接的java代码
String APP_NAME = "随便写,表示你项目的名字,必须与推流保持一致";
// 注意此处,此处的key不是推流的那个key
String PULL_KEY = "上述截图中的主KEY,注意不是推流KEY";
// 注意此处与推流不同的地方是这个域名,这个域名在本文第一步有介绍
String PULL_DOMAIN = "rtmp://pull.shiwentian.cn";
String userId = "当前拉流ID,你也可以认为是主播ID,用户ID,都可以";
String nowMilli = String.valueOf(Instant.now().toEpochMilli() / 1000);
String str = "/" + APP_NAME + "/" + userId + "-" + nowMilli + "-0-0-" + PUSH_KEY;
Md5PasswordEncoder md5 = new Md5PasswordEncoder();
String authKeyMd5 = md5.encodePassword(str, "");
String domain = PUSH_DOMAIN + "/" + APP_NAME;
String streamKey = userId + "?auth_key=" + nowMilli + "-0-0-" + authKeyMd5;
// 注意此处,与推流不同,拉流只需要下面一个链接即可,而推流需要输入两个,即domain和streamKey
String url = domain + "/" + streamKey;
System.out.println(url);
现在我们拿到拉流地址之后,如何使用呢??根据阿里云官方文档,他建议我们使用拉流工具VLC来测试拉流
VLC官网
阿里云对VLC使用方式的介绍:视频直播 > 用户指南 > 推播流配置 > PC端推流与播放
本人表达能力有限,以此谨记,但愿给同道中人带来方便
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)