目录

  • 一、申请指南
  • 二、配置推流地址\播放地址
  • 三、配置鉴权信息
  • 四、 测试播放
  • 五、OBSStudio和PotPlayer的使用
  • 六、安卓的播放简单集成
  • 七、总结

一、申请指南

官网地址:https://www.aliyun.com/product/live

准备工作:

  1. 在阿里云进行ICP备案
    已在其它ISP备案但未在阿里备案的也需重新接入,我这边资料齐全一次过大概花了7天。但这里有一个坑,阿里备案需要备案服务号,而直播这边不提供备案服务号,在线人工咨询、工单咨询后,给出的回复(2020/03/02)是目前只能去购买一台云服务器ECS(我们服务器没有部署在阿里云平台)。好在价格也不贵,低配200/年拿了个备案服务号。

  2. OBSStudio
    研发时测试推流
    点击下载: OBSStudio

  3. PotPlayer\VLC Media Player
    研发时测试播放
    点击下载: PotPlayer
    点击下载: VLC Media Player

二、配置推流地址\播放地址

1. 进入直播控制台,点击域名管理,点击添加域名(域名先需在阿里云备案
2. 分别添加一个推流地址与播放地址(注意两个地址需不同)

三、配置鉴权信息

进入直播控制台,点击域名管理,而后分别配置推流域名和播放域名

1. 配置推流域名
a. 配置回调地址

官方说明: 推断流回调可以进行直播流流状态实时信息回调,及时通知用户推流或断流操作结果。
其中https://live.aliyunlive.com/pub为自己服务器地址,也就是配置的推流回调地址。

样例:

https://live.aliyunlive.com/pub? action=publish & app=xc.cdnpe.com & appname=test01 & id=test01 & ip=42.120.74.183 & node=cdnvideocenter010207116011.cm3

参数说明:

b.访问控制
点击同页面访问控制,在URL鉴权中再点击修改配置,然后设置一个鉴权KEY。推荐32位带大小写参。

2. 配置播放域名
a. 配置Https
点击HTTPS配置,上传证书即可(如无证书,可以参考我的另外一篇文章,可以免费领取一年阿里云的SSL证书)

b. 和推流域名同样,配置一个播放鉴权key(尽量不要与推流域名一样)

四、 测试播放

1. 使用地址生成器生成一个推流地址与播放地址
输入一个AppName(Path)和StreamName(Filename),点击生成,会得到推流地址和播放地址,分别丢如OBS和Potplayer,测试是否可以正常推拉流。(工具使用该篇文章后面讲解)

2. 自己组装推拉流地址

先看官方文档:


例如
域名:live.test.com
AppName: app
StreamName: test
Timestamp: 1583133237 (10位秒,在时间戳的前30分钟内,该鉴权key有效)
rand: 477b3bbc253f467b8def6711128c7bec (自定义随机字符,官方推荐去掉-的UUID,为进一步保证鉴权Key的安全,这里测试后得出同一流,推流的rand和播放的rand可以不同)
uid: 0 (官方说明:暂未使用,设置成 0 即可)
鉴权Key: 123456 (注意推流和播放的鉴权Key不同,上面已有讲解)

组合地址后为:
rtmp://live.test.com/app/test?auth_key=timestamp-rand-uid-md5hash

md5hash的生成方法为:

URI-Timestamp-rand-uid-PrivateKey(URI是用户的请求对象相对地址,不包含参数,如:/Filename)
HashValue = md5sum(sstring)

即为:
/app/test-1583133237-477b3bbc253f467b8def6711128c7bec-0-123456
取md5小写 (注意小写) = e732852bdc84dac82f055cfff833f7e1,就是PrivateKey

最后拼合地址为:
rtmp://live.test.com/app/test?auth_key=1583133237-477b3bbc253f467b8def6711128c7bec-0-e732852bdc84dac82f055cfff833f7e1

推流和播放的生成方法相同。

五、OBSStudio和PotPlayer的使用

1. OBSStudio
打开OBSStudio,点击文件 - 设置(或者右下角设置)-切换到[推流]选项卡,把服务改为自定义,服务器输入推流地址即可。

然后新增一个来源,测试的话摄像头比较好,容易观察和判断细节。

最后,点击开始推流后,左下角无错误提示,右下角有流量在走,即推流成功。

2. PotPlayer
确定正在推流后,打开PotPlayer,输入播放地址即可。

六、安卓的播放简单集成

这里使用阿里云提供的播放SDK:https://help.aliyun.com/document_detail/125579.html?spm=a2c4g.11186623.2.7.3b656381pv9iGi

1. 引入模块
工程build.gradle

allprojects {repositories {google()jcenter()mavenCentral()// 添加阿里源maven {url 'https://maven.aliyun.com/repository/releases'}}
}

App build.grade

dependencies {//https://help.aliyun.com/document_detail/124711.html?spm=a2c4g.11186623.6.1079.a9ea1bc7WxDrpL//https://maven.aliyun.com/mvn/searchimplementation 'com.aliyun.sdk.android:AliyunPlayer:4.7.3-full'implementation 'com.alivc.conan:AlivcConan:1.0.2.1'}

2. Activity源码

package com.itxca.test.live;import android.graphics.Bitmap;
import android.view.SurfaceHolder;
import android.view.SurfaceView;import com.aliyun.player.AliPlayer;
import com.aliyun.player.AliPlayerFactory;
import com.aliyun.player.IPlayer;
import com.aliyun.player.bean.ErrorInfo;
import com.aliyun.player.bean.InfoBean;
import com.aliyun.player.nativeclass.TrackInfo;
import com.aliyun.player.source.UrlSource;
import com.itxca.test.R;
import com.itxca.test.ui.bases.BaseActivity;/*** Project Name : test* Package Name : com.itxca.test.live* Create Time  : 2020-03-02 11:05* Create By    : @author xIao* Version      : 1.0.0**/public class AliPlayActivity extends BaseActivity {private SurfaceView surfaceView;private AliPlayer aliyunVodPlayer;@Overridepublic boolean isRegEventBus() {return false;}@Overrideprotected int getLayoutId() {return R.layout.activity_tx_play;}@Overrideprotected int getTitleBarId() {return R.id.tb_title;}@Overrideprotected void onDestroy() {super.onDestroy();if (aliyunVodPlayer != null) {aliyunVodPlayer.release();}}@Overrideprotected void initView() {setTitle("直播播放");}@Overrideprotected void initData() {initPlayer();initSourceData();}private void initSourceData() {//创建VidStsUrlSource urlSource =new UrlSource();urlSource.setTitle("测试001");//替换该地址为你的播放地址urlSource.setUri("rtmp://live.test.com/app/test?auth_key=1583119273-0-0-82d0b07300f2bd4aef2df7da0adf9798");//设置播放源aliyunVodPlayer.setDataSource(urlSource);//准备播放aliyunVodPlayer.prepare();//播放aliyunVodPlayer.start();}private void initPlayer() {//如果播放的视频是通过播放器SDK安全下载后的本地文件,那么还需要设置一个加密校验信息(建议在Application中配置一次即可)://PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");//创建播放器aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());//绑定viewsurfaceView = findViewById(R.id.sv_live_player);surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {aliyunVodPlayer.setDisplay(holder);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {aliyunVodPlayer.redraw();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {aliyunVodPlayer.setDisplay(null);}});//设置回调aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {@Overridepublic void onCompletion() {//播放完成事件}});aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {@Overridepublic void onError(ErrorInfo errorInfo) {//出错事件}});aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {@Overridepublic void onPrepared() {//准备成功事件}});aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {@Overridepublic void onVideoSizeChanged(int width, int height) {//视频分辨率变化回调}});aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {@Overridepublic void onRenderingStart() {//首帧渲染显示事件}});aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {@Overridepublic void onInfo(InfoBean infoBean) {//其他信息的事件,type包括了:循环播放开始,缓冲位置,当前播放位置,自动播放开始等}});aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {@Overridepublic void onLoadingBegin() {//缓冲开始。}@Overridepublic void onLoadingProgress(int percent, float kbps) {//缓冲进度}@Overridepublic void onLoadingEnd() {//缓冲结束}});aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {@Overridepublic void onSeekComplete() {//拖动结束}});aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {@Overridepublic void onSubtitleShow(long id, String data) {//显示字幕}@Overridepublic void onSubtitleHide(long id) {//隐藏字幕}});aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {@Overridepublic void onChangedSuccess(TrackInfo trackInfo) {//切换音视频流或者清晰度成功}@Overridepublic void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {//切换音视频流或者清晰度失败}});aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {@Overridepublic void onStateChanged(int newState) {//播放器状态改变事件}});aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {@Overridepublic void onSnapShot(Bitmap bm, int with, int height) {//截图事件}});}
}

3. Layout源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><include layout="@layout/layout_titlebar" /><include layout="@layout/layout_state" /><SurfaceViewandroid:id="@+id/sv_live_player"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

七、总结

阿里云直播的基本集成基本上就完了,推流的话Github也有很多例子,就不再详述了。其实播放也可以不用阿里的SDK,只要支持Rtmp、Flv或者M3U8的播放器都可以。
简单集成会很快,在域名备案成功后1小时能把推拉流调试完成,测试直播。但是阿里的设置里面细节其实很多,包括自动截图、录播、导播等,官方都有详细介绍,跟着做就行了。
整个集成流程我耗时在没注意推流和拉流的鉴权key不同,导致生成的流一直无法使用,各位也别在这翻车了。

原帖地址,转载请注明:https://blog.csdn.net/hx7013/article/details/104611262

阿里云直播集成简要指南相关推荐

  1. iOS直播集成和问题总结(阿里云直播)

    https://www.jianshu.com/p/714ce954e628 最近接手公司的直播项目,对以前遗留的问题做处理和优化, 于是顺便看了下阿里云直播的文档,在下面写下对直播的理解和遇到的问题 ...

  2. 首帧秒开+智能鉴黄+直播答题,阿里云直播系统背后技术大起底

    摘要: 想要快速实现直播能力,并对原有业务不产生任何影响,依托如阿里云一样的直播平台,来搭建移动直播系统,将技术难题交给阿里云,把更多的精力放在核心业务的本身,是最为稳妥和高效的选择.本文介绍阿里云直 ...

  3. 【Android】使用阿里云直播实现手机直播功能

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.阿里云视频直播流程 二.录制直播推流步骤 1. 集成说明 通过本地依赖方式集成SDK 通过Maven依赖方式集成S ...

  4. 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能

    由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望,去年我 ...

  5. 如何使用PHP对接阿里云直播?

    配置阿里云直播的推流地址和播放地址 使用阿里云直播功能前,首先需要在阿里云控制台中创建直播应用,然后获取推流地址和播放地址. 推流地址一般格式为: rtmp://{Domain}/{AppName}/ ...

  6. 猫晚流量再创记录,阿里云直播方案护航优酷2500万用户体验

    对"剁手党而言,天猫双11早已经超越了简单的"买买买",更是一场边看边玩的狂欢盛宴.今年的天猫双11狂欢夜晚会(简称"猫晚")在上海举办,这台兼具年轻 ...

  7. 阿里云直播PHP SDK如何使用

    前一篇聊了聊关于阿里云直播,如何进行进行调试,ok,那这篇我们就聊一聊关于阿里云直播的SDK(当然是关于PHP的),基于下面的原因: 1.直播云没有单独的SDK,直播部分的SDK是直接封装在CDN的相 ...

  8. 阿里云服务器新手选型指南

    阿里云服务器新手选型指南: 小型网站:1核2G共享型以上 中大型网站:4核8G通用型以上 项目临时测试:突发性能型.共享型,配置够用就行. 更多应用,比如分布式计算.AI学习等等,则需选择更好的云服务 ...

  9. 微信小程序接入阿里云直播

    小程序接入阿里云直播 前言:最近工作中遇到了小程序接入阿里云直播的需求(暂时只做播流,也就是播放端),于是打开阿里云直播文档发现居然没有小程序的相关文档,sdk也没有小程序的版本,网上也没搜到相关案例 ...

  10. Java 实现阿里云直播

    阿里云播放器直接在线点播视频以及直播技术,此处记录直播实现过程 更多精彩 更多技术博客,请移步 IT人才终生实训与职业进阶平台 官网 阿里云直播-快速入门 准备步骤 创建 阿里云账号 根据 流程 完成 ...

最新文章

  1. android标题栏(titlebar)显示进度条
  2. 智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题
  3. 禁止java更新_禁止:禁止对'replicas','template'和'updateStrategy'以外的字段的statefulset规范进行更新...
  4. 罗辑思维 - 当代的学习方法
  5. JAVA 的 Date、Calendar的常用用法
  6. 并发编程-12线程安全策略之常见的线程不安全类
  7. ubuntu vim命令
  8. php 瀑布流布局,CSS3实现瀑布流布局的方法
  9. php项目实战流程_一个完整的php流程管理实例代码分享
  10. XXE漏洞攻击与防御
  11. linux安装yum的脚本,lnmp一键安装脚本yum方式快速安装
  12. oracle case grouping,ORACLE GROUPING函数的使用
  13. make条件判断ifeq,ifneq,ifdef,ifndef
  14. java识别答题卡纸_识别复杂的答题卡的主要算法
  15. 请说说自己对鲁迅本人他作品的了解计算机,26 回忆鲁迅先生课堂实录及点评
  16. Bot Chat(聊天机器人) HeroCard的简单用法
  17. 纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展
  18. select获取选中的option(包含value和text,重点是text怎么获取)
  19. 2019新税率计算器
  20. IO流1(字节流+字符流+输入流+输出流+节点流+处理流)

热门文章

  1. 查看TRP开头的数据量超过1000000的表的index情况
  2. 世界曾经有这样一个中国
  3. 跟着Vam一起学习Typescript(第一期)(更新中)
  4. 批量转换文件编码(By notepad++)
  5. 【LSTM实战】股票走势预测全流程实战(stock predict)
  6. python 单一继承定义_python 单继承、多继承、菱形继承
  7. 实验吧-天网管理系统
  8. 谁说变态才叫函数,带你了解不一样的表格函数
  9. python策略模式的应用_策略模式-Python四种实现方式
  10. SAP ABAP BDC基础使用方法