最近,公司要搞屏幕远程控制,包含了屏幕直播。一开始公司准备自己搭服务器的,后来 说服务器转码,前端还要插件的,麻烦之类的。然后就变成了用阿里的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,直播推流地址和播流地址生成相关推荐

  1. PHP 阿里直播(阿里直播SDK 直播介绍 直播扩展知识)

    直播原理图示: 关于直播,首先要明白直播里面的流是什么定西 推流: 推流是指采集阶段的打包内容传输到服务器的过程. 实际上就是将现场视频信号传输到网络的过程,推流对网络要求比较高,如果网络不稳定,直播 ...

  2. 【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )

    文章目录 一.IP 数据报传输方式 二.组播 IP 地址 三.组播 MAC 地址 四.IGMP 协议 五.组播路由选择协议 一.IP 数据报传输方式 IP 数据报传输方式 : ① 单播 : 发送数据到 ...

  3. 阿里云视频直播推流和播流地址生成

    记录学习阿里云视频直播 准备环境: 1.已开通阿里云视频直播服务. 2.2个域名:一个用于推流,一个用于播流. 3.在视频直播服务里面找到域名配置,配置好播流和推流域名之间的关系. 4.下载Vlc和o ...

  4. 七牛云 直播 java_七牛云直播SDK之推流解析

    最近由于项目需要,研究了直播的推拉流以及滤镜叠加的效果,在此记录一下一些小的细节. 前期做了直播SDK的调研,发现七牛云的SDK更符合项目需求一点,所以,最终选择了七牛云的SDK. 推流 七牛云官方的 ...

  5. android七牛直播镜像,七牛云直播SDK之推流解析

    最近由于项目需要,研究了直播的推拉流以及滤镜叠加的效果,在此记录一下一些小的细节. 前期做了直播SDK的调研,发现七牛云的SDK更符合项目需求一点,所以,最终选择了七牛云的SDK. 推流 七牛云官方的 ...

  6. 获取阿里推流播流地址

    1.进入工作台--直播控制台--地址生成器,输入播流域名,自动关联推流域名,APPname和steam name自定义,点击"开始生成",在"地址示例说明"里看 ...

  7. 七牛云直播SDK之推流端快速开发

    前言 七牛云直播SDK迭代快,但是官方文档跟不上迭代速度,导致快速开始这部分文档的还没更新,很多被废弃的类.方法还在文档中,本文是基于2.3.0版本进行的快速开发,由于是第一次接触直播,存在着许多不足 ...

  8. 阿里云视频直播,使用obs推流验证是否成功

    阿里云视频直播推流地址验证 首先,根据上篇文章得到推流地址以及播流地址,从官方下载obs工具和vlc工具,下面开始验证地址是否正确? 演示 1.打开obs工具,找到右下角的设置按钮,点击推流,将推流地 ...

  9. java 阿里云直播配置及推拉流地址获取

    一.开通阿里云直播 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live . 点击下方的"立即开通". 如果是还未注册的用户请按照页面 ...

  10. java SpringBoot 集成 阿里云视频直播 完成直播功能

    经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 开发直播前先满足已下条件 1.开通视频直播功能 2.购买好了OSS存储 3.购买两个域名并且备案好 ...

最新文章

  1. DataWorks 安装手册
  2. 家校无忧接入云信,教师家长即时沟通
  3. c语言文件所在的卷,C语言复习卷带答案.docx
  4. c++名字查找和作用域的一个例子的感想
  5. hybris commerce storefront的产品搜索功能
  6. 用台球杆击球,这个击球力道能传递到10米之外的球上吗?
  7. 单片机复位后为什么要对sp重新赋值_51单片机系列之2点亮第一个led小灯
  8. 王道 ——线程概念和多线程模型
  9. vue下使用axios应用
  10. HTML在日期单元格添加小图片,如何给图片添加上文字、日期和自己名字的小水印呢?...
  11. [李景山php]每天TP5-20170110|thinkphp5-Model.php-3
  12. Xiaojie雷达之路---车载雷达信号处理流程
  13. ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存...
  14. day07【Collection、泛型、数据结构】
  15. 华为在俄罗斯开设基于ARM技术的数据中心:技术之外,环境使然?
  16. 巧妙利用DZ自有功能实现豆丁网在线文档功能
  17. 智能工厂的IGT数据采集网关-PLC与数据库双向通讯的多种SQL语句配置
  18. 粒子群算法(PSO)的Python实现(求解多元函数的极值)
  19. macOS刷机后,分享一波必装软件
  20. PHP读和写Excel文件

热门文章

  1. 社交红利的诞生与初期创业
  2. 简约至上交互式设计四策略
  3. python三阶魔方_三阶魔方自动求解及动态可视化matlab代码
  4. 华为云服务的使用方法详解--以照片备份与恢复为例
  5. 在网页中使用嵌入字体
  6. 【21考研】计算机/软件等专业调剂信息集合!【完结版】
  7. LCD屏的TCON、Source Driver、Gate Driver 、Gamma概念
  8. Vite 使用TSX/JSX
  9. 界面设计中如何增强CTA按钮召唤力?
  10. 微信企业号开发模式的PHP代码