电商直播带货功能接入阿里云第三方实现
开通阿里云导播直播功能
接入阿里云三方直播平台,需要一个备过案的域名(有点烦,省事的话就问公司提供)
打开阿里云控制台 添加域名 这里要注意一下;添加的域名是二级域名
比如 推流域名: pushlive.xxx.com
拉流域名: pulllive.xxx.com
xxx.com就是你备过案的域名添加域名进行域名之间一个关联,拉流域名与推流域名
地址生成器可以生成测试中对应的推流与拉流的地址:
AppName可以自己定义
StreamName 页面传过来的数据(这里可以自己定义一个)格式大致如下:
推流地址:
rtmp://推流域名/shoplive/shopX5?auth_key=1590626986-0-0-85d0170b6b5bc885117a5c4f73e513d2
拉流地址(有三种拉流地址):
“flv”:“http://播流域名/shoplive/shopX5.flv?auth_key=1590626986-0-0-bb621d145c717e79293afde709f839e5”,
“rtm”:“rtmp://播流域名/shoplive/shopX5?auth_key=1590626986-0-0-85d0170b6b5bc885117a5c4f73e513d2”,
“m3u8”:“http://播流域名/shoplive/shopX5.m3u8?auth_key=1590626986-0-0-24d602ad55a5660e400cbda4014d1da3”
- 阿里云控制台操作完之后;奉上我写的代码;如下按照阿里云给的格式去拼接生成推流与拉流的地址
package com.shopx5.utils;import com.alibaba.fastjson.JSONObject;
import com.shopx5.utils.alipay.MD5Util;import java.util.HashMap;
import java.util.Map;/**** @Description: 阿里云直播推拉流地址工具类*/
public class AliPlayAndPushUtils {/*** 推流域名 阿里云配置的推流域名*/private static final String pushDomain = "推流域名";/*** 拉流域名 阿里云配置的拉流域名*/private static final String pullDomain = " 拉流域名";/*** appName* 随便取一个app名字:比如说 penggelive*/private static final String appName = "shoplive";/*** 鉴权key: 阿里云创建了推流域名和播流域名过后,他给生成的,每个域名一个,推流用推流的key,* 播流用播流的key,我这里只有一个key,因为我自己定义的一个,然后去阿里云里面把他们两个的权鉴备用key都设置成我设置的了*/private static final String key = "key";/*** 根据阿里云模板id,配置拉流显示流畅度* 如果没有配置模板,则将UDID 、LDID、SDID、HDID从代码中删除,否则会播流时不成功*/private static final String UDID = "_ud";//超高清private static final String LDID = "_ld";//流畅private static final String SDID = "_sd";//标清private static final String HDID = "_hd";//高清/*** @param time 十位数的时间戳* @return 推流的地址*/public static String CreatePushUrl(String streamName, long time) {String strpush = "/" + appName + "/" + streamName + "-" + time + "-0-0-" + key;String pushUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-0-0-" + MD5Util.getMD5(strpush);
// System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>推流: " + pushUrl);return pushUrl;}/*** @param time 十位数的时间戳* // * @param rand 这是用来标识的 否则同一个时间戳 生成的地址总是相同的* 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)* @return 播放流的地址 默认是flv 也可以更改此代码*/public static String GetPlayUrl(String streamName, long time) {String strviewrtmp1 = null;String strviewflv1 = null;String strviewm3u81 = null;String rtmpurl1 = null;String flvurl1 = null;String m3u8url1 = null;strviewrtmp1 = "/" + appName + "/" + streamName + UDID + "-" + time + "-0-0-" + key;strviewflv1 = "/" + appName + "/" + streamName + UDID + ".flv-" + time + "-0-0-" + key;strviewm3u81 = "/" + appName + "/" + streamName + UDID +".m3u8-" + time + "-0-0-" + key;rtmpurl1 = "rtmp://" + pullDomain + "/" + appName + "/" + streamName + UDID + "?auth_key=" + time + "-0-0-" + MD5Util.getMD5(strviewrtmp1);flvurl1 = "http://" + pullDomain + "/" + appName + "/" + streamName + UDID + ".flv?auth_key=" + time + "-0-0-" + MD5Util.getMD5(strviewflv1);m3u8url1 = "http://" + pullDomain + "/" + appName + "/" + streamName + UDID +".m3u8?auth_key=" + time + "-0-0-" + MD5Util.getMD5(strviewm3u81);Map<String, String> resultMap = new HashMap<>(5);resultMap.put("rtm", rtmpurl1);resultMap.put("flv", flvurl1);resultMap.put("m3u8", m3u8url1);
// System.out.println(">>>>>>>>>>>>>>>>>>拉流: " + rtmpurl1);
// System.out.println(">>>>>>>>>>>>>>>>>>拉流: " + flvurl1);
// System.out.println(">>>>>>>>>>>>>>>>>>拉流: " + m3u8url1);return JSONObject.toJSONString(resultMap);}public static void main(String[] args) throws Exception {Long longTime = DateUtils.longTodate();//有效时间String pushUrl = CreatePushUrl("zh", longTime);String playUrl = GetPlayUrl("zh", longTime);System.out.println("推流地址====" + pushUrl);System.out.println("拉流地址====" + playUrl);}
}
- 鉴权key,拉流与推流的key保持一致,如
推流
播流
package com.shopx5.utils;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;/*** 描述:公共日期工具类*/
public class DateUtils {/*** 将北京时间转换为Unix时间,获取一个十位数的字符串* 供直播推流、拉流使用* @return*/public static Long longTodate() {Date timeDate =null;try {//获取当前时间long longTime = System.currentTimeMillis();longTime+=30*1000*60*60;//在当前日期是增加3个小时。即有效时间3个小时SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");timeDate = df.parse(df.format(longTime));} catch (Exception e) {e.printStackTrace();}//将日期转换为十位数的纯数字字符串long time = timeDate.getTime()/1000;return time;}
}
package com.shopx5.utils.alipay;import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.UUID;public class MD5Util{//MD5加密 升序串:xx&xx&0.01key key=value, UTF-8public static String MD5Encode(String origin, String charsetname){String resultString = null;try{resultString = new String(origin);//new一个MD5实例MessageDigest md = MessageDigest.getInstance("MD5");if(charsetname == null || "".equals(charsetname))resultString = byteArrayToHexString(md.digest(resultString.getBytes()));elseresultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));} catch(Exception e){e.printStackTrace();}return resultString;}//将MD5输出的二进制结果转换为小S写H的O十P六X进5制private static String byteArrayToHexString(byte b[]){StringBuffer resultSb = new StringBuffer();for(int i = 0; i < b.length; i++){resultSb.append(byteToHexString(b[i]));}return resultSb.toString(); }private static String byteToHexString(byte b){int n = b;if(n < 0)n += 256;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}private static final String hexDigits[] ={"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};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);}public static String getUUID() {return UUID.randomUUID().toString().replaceAll("-", "");}public static void main(String[] args) {System.out.println(MD5Encode("http://alipay?a=1&b=2&c=3", "UTF-8")); //ad8c2bb7fe0eb9efce8d2f17448bb50bSystem.out.println(MD5Encode("http://alipay?a=1&b=2&c=3", "GBK")); //ad8c2bb7fe0eb9efce8d2f17448bb50b}}
- 安装推流工具OBS,进行推流操作即直播;下载地址如下
链接:https://pan.baidu.com/s/1FH580XqozMUmDaE-cxKSPg
提取码:p6qt
安装成功之后,打开OBS
- 点击OBS下方窗口“来源”-----》+,选择显示器捕获,点击确认如图(这个自己需要设置即可)
- 点击设置-----》推流,将推流地址填入下方中,(格式不要错)如图:
- 点击确认
- 点击开始推流
- 观看直播,即需要将生成的拉流地址复制到拉流工具中;如:这里使用LVC(这个自己选择);打开LVC----》媒体-----》打开网络串流,将地址复制上去,点击播放既可以观看
电商直播带货功能接入阿里云第三方实现相关推荐
- 新手做电商直播带货怎么和快递合作谈价格
新手做电商直播带货怎么和快递合作谈价格达人带货一般怎样的合作模式?#达人带货 #直播带货 #红人 #百收网 跟快递谈价其实是有方法的,快递的价格不是说不能打下来,就是需要你们多一点点的心机.这个视频我 ...
- 电商直播带货小技巧(入门版)
作为电商的一个新风口,众多企业和商家纷纷做直播带货的新尝试.毕竟大家都知道这是一个机遇,但机遇不等于入门就可以获得成功. 虽然直播电商确实能够给众企业和商家带来更多的流量,但是大家首先要面对的一个难题 ...
- 掌握了这些技巧,电商直播带货就能高效完成
疫情之后,万物可直播的时代来临.电商直播带货似乎成为了各大商家和企业的新型销售模式,电商直播带货活了,那么想要做一场直播就能带货上万件甚至数十万件,销售额达到百万甚至上亿,这就需要带货主播掌握一些技巧 ...
- 618购物狂欢节来袭,教你跨境电商直播带货5大技巧
618购物狂欢节即将来袭,各大平台预热活动陆续启动,直播带货开始火爆起来,跨境电商新手怎么做直播带货?今天小编带来了一篇直播干货,教你从零开始做直播带货!遵循这六个流程和五大重点,新手和小白商家也可快 ...
- 电商直播带货成为销货新方式!新业态发力“双11”
"双11"正进入第12年,如今大家的"购物车"里,商品与服务"比翼","洋货"共国潮"齐飞"--透过 ...
- 杨建允:2022年抖音快手电商直播带货选品的技巧和逻辑
抖音快手电商直播间的流量推荐机制是什么样的? 我们首先来系统的分析一下抖音快手的核心指标: 抖音/快手电商GMV=平台总VV数x电商内容渗透率xGPM VV数=活跃用户数×人均时长 / 单条内容平均时 ...
- java SpringBoot+SpringCloud+mybatis b2b2c o2o电商平台 小程序商城 直播电商 直播带货 代跑腿 三级分销 短视频带货 电子商务 源码
涉及平台:平台管理(包含自营店面).商家端(PC端.手机端).买家平台(PC端.H5/公众号.小程序.APP端(IOS/Android).微服务 核心架构:Spring Cloud.Spring Bo ...
- java版b2b2c o2o 多租户多商家电子商务之(商家管理)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货
涉及平台:平台管理(包含自营店面).商家端(PC端.手机端).买家平台(PC端.H5/公众号.小程序.APP端(IOS/Android).微服务平台(业务服务) 核心架构:Spring Cloud.S ...
- java版b2b2c o2o 多租户多商家电子商务之(首页登录界面动态配置)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货
涉及平台:平台管理(包含自营店面).商家端(PC端.手机端).买家平台(PC端.H5/公众号.小程序.APP端(IOS/Android).微服务平台(业务服务) 核心架构:Spring Cloud.S ...
最新文章
- 64位ubuntu安装WPS
- 目标检测--边界框(bounding box)解析
- Redis模式匹配删除key
- C# winform中ListView用法
- MORMOT数据库连接池
- matlab 小波滤波器,matlab小波滤波器使用
- 如何列出所有用户的所有cron作业?
- Luogu 4069 [SDOI2016]游戏
- Exescope等打开DLL,导出函数名称混乱的问题
- 深度学习究竟怎么入门?两位Google大神掀起剑气之争
- [MATLAB]层次分析法计算权重
- 基于小程序的小区物业管理平台开发笔记
- 破解加密的PDF文件有什么方法?
- java 正则 获取域名_java正则获取域名
- java游戏下载象棋暗棋_JS小游戏之象棋暗棋源码详解
- Java项目:课程自动排课系统(java+SpringBoot+html+layui+thymeleaf+redis+mysql)
- macOS+matlab 2020b matlab_bgl工具箱使用时 MEX文件编译出错
- css之“计算属性“
- 项目:YouToBe
- 编程规范及程序员的自我修养