阿里直播SDK,直播推流地址和播流地址生成
最近,公司要搞屏幕远程控制,包含了屏幕直播。一开始公司准备自己搭服务器的,后来 说服务器转码,前端还要插件的,麻烦之类的。然后就变成了用阿里的SDK 一条龙服务。
不过 我自己在前期调研阶段 ,也自己实现了直播推送H.264 到服务器,服务器转发到手机解码播放。延迟1s左右。这个 在我下一篇博客哪里会详细叙说。
阿里直播SDK推流地址生成
首先 来看一个推流地址样式
rtmp://liveDomain/appName/streamName?auth_key=time-rand-0-md5hash
记得注意 我加粗的字体,下面上代码
/*** @param appName 控制台上面的app名称* @param streamName 流的名称* @param time 十位数的时间戳* @param rand 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)* @param key 鉴权key* @param liveDomain 推流域名* @return 推流的地址*/public static String CreatePushUrl(String appName, String streamName, String time,String rand, String key, String liveDomain) {Objects.requireNonNull(appName);Objects.requireNonNull(streamName);Objects.requireNonNull(time);Objects.requireNonNull(key);Objects.requireNonNull(liveDomain);String strpush = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;String pushurl = "rtmp://video-center.alivecdn.com/" + appName + "/" + streamName + "?vhost=" + liveDomain + "&auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strpush);return pushurl;}
阿里直播SDK播流地址生成
/*** @param appName 控制台上面的app名称* @param streamName 流的名称* @param time 十位数的时间戳* @param rand 这是用来标识的 否则同一个时间戳 生成的地址总是相同的 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)* @param key 鉴权key* @param liveDomain 推流域名* @param templateId 无用 传入null就行* @return 播放流的地址 默认是flv 也可以更改此代码*/public static String GetPlayUrl(String appName, String streamName, String time,String rand, String key, String liveDomain, String templateId) {String strviewrtmp1 = null;String strviewflv1 = null;String strviewm3u81 = null;String rtmpurl1 = null;String flvurl1 = null;String m3u8url1 = null;Objects.requireNonNull(appName);Objects.requireNonNull(streamName);Objects.requireNonNull(time);Objects.requireNonNull(key);Objects.requireNonNull(liveDomain);if (templateId == null) {strviewrtmp1 = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;strviewflv1 = "/" + appName + "/" + streamName + ".flv-" + time + "-"+rand+"-0-" + key;strviewm3u81 = "/" + appName + "/" + streamName + ".m3u8-" + time + "-"+rand+"-0-" + key;rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewrtmp1);flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".flv?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewflv1);m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewm3u81);} else {strviewrtmp1 = "/" + appName + "/" + streamName + "_" + templateId + "-" + time + "-"+rand+"-0-" + key;strviewflv1 = "/" + appName + "/" + streamName + "_" + templateId + ".flv-" + time + "-"+rand+"-0-" + key;strviewm3u81 = "/" + appName + "/" + streamName + "_" + templateId + ".m3u8-" + time + "-"+rand+"-0-" + key;rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + "?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewrtmp1);flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".flv?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewflv1);m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewm3u81);}Log.d(">>>>>>>>>>>>>>>>>>", rtmpurl1);Log.d(">>>>>>>>>>>>>>>>>>", flvurl1);Log.d(">>>>>>>>>>>>>>>>>>", m3u8url1);return flvurl1;}
代码很全面
现在 附上完整代码。
md5加密算法 网上复制来的
public class Md5Utils {public static String getMD5(String str) {try {// 生成一个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes());// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值String md5=new BigInteger(1, md.digest()).toString(16);//BigInteger会把0省略掉,需补全至32位return fillMD5(md5);} catch (Exception e) {throw new RuntimeException("MD5加密错误:"+e.getMessage(),e);}}private static String fillMD5(String md5){return md5.length()==32?md5:fillMD5("0"+md5);}
}
阿里直播SDK推流播流工具
package com.alivc.live.pusher.demo.utils;import android.hardware.input.InputManager;
import android.util.Log;import java.util.Dictionary;
import java.util.Objects;/*** 创建时间 2018/11/12** @author plani*/
public class PlayAndPushUtils {/*** @param appName 控制台上面的app名称* @param streamName 流的名称* @param time 十位数的时间戳* @param rand 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)* @param key 鉴权key* @param liveDomain 推流域名* @return 推流的地址*/public static String CreatePushUrl(String appName, String streamName, String time,String rand, String key, String liveDomain) {Objects.requireNonNull(appName);Objects.requireNonNull(streamName);Objects.requireNonNull(time);Objects.requireNonNull(key);Objects.requireNonNull(liveDomain);String strpush = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;String pushurl = "rtmp://video-center.alivecdn.com/" + appName + "/" + streamName + "?vhost=" + liveDomain + "&auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strpush);return pushurl;}/*** @param appName 控制台上面的app名称* @param streamName 流的名称* @param time 十位数的时间戳* @param rand 这是用来标识的 否则同一个时间戳 生成的地址总是相同的 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)* @param key 鉴权key* @param liveDomain 推流域名* @param templateId 无用 传入null就行* @return 播放流的地址 默认是flv 也可以更改此代码*/public static String GetPlayUrl(String appName, String streamName, String time,String rand, String key, String liveDomain, String templateId) {String strviewrtmp1 = null;String strviewflv1 = null;String strviewm3u81 = null;String rtmpurl1 = null;String flvurl1 = null;String m3u8url1 = null;Objects.requireNonNull(appName);Objects.requireNonNull(streamName);Objects.requireNonNull(time);Objects.requireNonNull(key);Objects.requireNonNull(liveDomain);if (templateId == null) {strviewrtmp1 = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;strviewflv1 = "/" + appName + "/" + streamName + ".flv-" + time + "-"+rand+"-0-" + key;strviewm3u81 = "/" + appName + "/" + streamName + ".m3u8-" + time + "-"+rand+"-0-" + key;rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewrtmp1);flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".flv?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewflv1);m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewm3u81);} else {strviewrtmp1 = "/" + appName + "/" + streamName + "_" + templateId + "-" + time + "-"+rand+"-0-" + key;strviewflv1 = "/" + appName + "/" + streamName + "_" + templateId + ".flv-" + time + "-"+rand+"-0-" + key;strviewm3u81 = "/" + appName + "/" + streamName + "_" + templateId + ".m3u8-" + time + "-"+rand+"-0-" + key;rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + "?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewrtmp1);flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".flv?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewflv1);m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewm3u81);}Log.d(">>>>>>>>>>>>>>>>>>", rtmpurl1);Log.d(">>>>>>>>>>>>>>>>>>", flvurl1);Log.d(">>>>>>>>>>>>>>>>>>", m3u8url1);return flvurl1;}
}
如果有不懂的,可以关注我的公众号 “知我饭否” 向我留言。我也会每天更新一些文章,有兴趣的可以扫描下方的二维码。
阿里直播SDK,直播推流地址和播流地址生成相关推荐
- PHP 阿里直播(阿里直播SDK 直播介绍 直播扩展知识)
直播原理图示: 关于直播,首先要明白直播里面的流是什么定西 推流: 推流是指采集阶段的打包内容传输到服务器的过程. 实际上就是将现场视频信号传输到网络的过程,推流对网络要求比较高,如果网络不稳定,直播 ...
- 【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )
文章目录 一.IP 数据报传输方式 二.组播 IP 地址 三.组播 MAC 地址 四.IGMP 协议 五.组播路由选择协议 一.IP 数据报传输方式 IP 数据报传输方式 : ① 单播 : 发送数据到 ...
- 阿里云视频直播推流和播流地址生成
记录学习阿里云视频直播 准备环境: 1.已开通阿里云视频直播服务. 2.2个域名:一个用于推流,一个用于播流. 3.在视频直播服务里面找到域名配置,配置好播流和推流域名之间的关系. 4.下载Vlc和o ...
- 七牛云 直播 java_七牛云直播SDK之推流解析
最近由于项目需要,研究了直播的推拉流以及滤镜叠加的效果,在此记录一下一些小的细节. 前期做了直播SDK的调研,发现七牛云的SDK更符合项目需求一点,所以,最终选择了七牛云的SDK. 推流 七牛云官方的 ...
- android七牛直播镜像,七牛云直播SDK之推流解析
最近由于项目需要,研究了直播的推拉流以及滤镜叠加的效果,在此记录一下一些小的细节. 前期做了直播SDK的调研,发现七牛云的SDK更符合项目需求一点,所以,最终选择了七牛云的SDK. 推流 七牛云官方的 ...
- 获取阿里推流播流地址
1.进入工作台--直播控制台--地址生成器,输入播流域名,自动关联推流域名,APPname和steam name自定义,点击"开始生成",在"地址示例说明"里看 ...
- 七牛云直播SDK之推流端快速开发
前言 七牛云直播SDK迭代快,但是官方文档跟不上迭代速度,导致快速开始这部分文档的还没更新,很多被废弃的类.方法还在文档中,本文是基于2.3.0版本进行的快速开发,由于是第一次接触直播,存在着许多不足 ...
- 阿里云视频直播,使用obs推流验证是否成功
阿里云视频直播推流地址验证 首先,根据上篇文章得到推流地址以及播流地址,从官方下载obs工具和vlc工具,下面开始验证地址是否正确? 演示 1.打开obs工具,找到右下角的设置按钮,点击推流,将推流地 ...
- java 阿里云直播配置及推拉流地址获取
一.开通阿里云直播 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live . 点击下方的"立即开通". 如果是还未注册的用户请按照页面 ...
- java SpringBoot 集成 阿里云视频直播 完成直播功能
经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 开发直播前先满足已下条件 1.开通视频直播功能 2.购买好了OSS存储 3.购买两个域名并且备案好 ...
最新文章
- DataWorks 安装手册
- 家校无忧接入云信,教师家长即时沟通
- c语言文件所在的卷,C语言复习卷带答案.docx
- c++名字查找和作用域的一个例子的感想
- hybris commerce storefront的产品搜索功能
- 用台球杆击球,这个击球力道能传递到10米之外的球上吗?
- 单片机复位后为什么要对sp重新赋值_51单片机系列之2点亮第一个led小灯
- 王道 ——线程概念和多线程模型
- vue下使用axios应用
- HTML在日期单元格添加小图片,如何给图片添加上文字、日期和自己名字的小水印呢?...
- [李景山php]每天TP5-20170110|thinkphp5-Model.php-3
- Xiaojie雷达之路---车载雷达信号处理流程
- ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存...
- day07【Collection、泛型、数据结构】
- 华为在俄罗斯开设基于ARM技术的数据中心:技术之外,环境使然?
- 巧妙利用DZ自有功能实现豆丁网在线文档功能
- 智能工厂的IGT数据采集网关-PLC与数据库双向通讯的多种SQL语句配置
- 粒子群算法(PSO)的Python实现(求解多元函数的极值)
- macOS刷机后,分享一波必装软件
- PHP读和写Excel文件