视频直播生成推流地址和播放地址的程序示例(Java)

简介: 直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址(Java示例代码)
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.lang3.*;
public class Create_Live_Url {
 
 /**
  * 计算md5
  * @param param
  * @return
  */
 public static String md5(String param) {
  if(param == null || param.length() == 0) {
   return null;
  }
  try {
   MessageDigest md5 = MessageDigest.getInstance("MD5");
   md5.update(param.getBytes());
   byte[] byteArray = md5.digest();
   
   BigInteger bigInt = new BigInteger(1, byteArray);
                 // 参数16表示16进制
   String result = bigInt.toString(16);
                 // 不足32位高位补零
   while(result.length() < 32) {
    result = "0" + result;
   }
   return result;
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
  return null;
 }
/**
     * 生成推流地址
     * @param pushDomain 推流域名
     * @param pushKey 推流域名配置的鉴权Key
     * @param appName 推流AppName
     * @param streamName 推流StreamName
     * @param expireTime 过期时间(单位是秒)
     */
 public static void generate_push_url(String pushDomain,String pushKey,String appName,String streamName,long expireTime) {
  String pushUrl = "";
  //推流域名未开启鉴权功能的情况下
  if(pushKey=="") {
   pushUrl = "rtmp://"+pushDomain+"/"+appName+"/"+streamName;
  }else {
   long timeStamp = System.currentTimeMillis()/1000L + expireTime;
   String stringToMd5 = "/"+appName+"/"+streamName+"-"+Long.toString(timeStamp)+"-0-0-"+pushKey;
   String authKey = md5(stringToMd5);
   pushUrl = "rtmp://"+pushDomain+"/"+appName+"/"+streamName+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+authKey;
  }
  System.out.println("推流地址是: "+pushUrl);
 }
/**
  * 生成播放地址
  * @param pullDomain 播放域名
  * @param pullKey 播放鉴权Key
  * @param appName 播放appName(同推流appName)
  * @param streamName 播放streamName (同推流streamName)
  * @param expireTime 过期时间(单位是秒
  */
 public static void general_pull_url(String pullDomain,String pullKey,String appName,String streamName,long expireTime) {
  String rtmpUrl = ""; //rtmp的拉流地址
  String hlsUrl = "";  //m3u8的拉流地址
  String flvUrl = "";  //flv的拉流地址
  //播放域名未配置鉴权Key的情况下
  if(pullKey == "") {
   rtmpUrl = "rtmp://"+pullDomain+"/"+appName+"/"+streamName;
   hlsUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".m3u8";
   flvUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".flv";
  }else {
   long timeStamp = System.currentTimeMillis()/1000L + expireTime;
   String rtmpToMd5 = "/"+appName+"/"+streamName+"-"+Long.toString(timeStamp)+"-0-0-"+pullKey;
   String rtmpAuthKey = md5(rtmpToMd5);
   rtmpUrl = "rtmp://"+pullDomain+"/"+appName+"/"+streamName+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+rtmpAuthKey;
   
   String hlsToMd5 = "/"+appName+"/"+streamName+".m3u8-"+Long.toString(timeStamp)+"-0-0-"+pullKey;
   String hlsAuthKey = md5(hlsToMd5);
   hlsUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".m3u8"+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+hlsAuthKey;
   
   String flvToMd5 = "/"+appName+"/"+streamName+".flv-"+Long.toString(timeStamp)+"-0-0-"+pullKey;
   String flvAuthKey = md5(flvToMd5);
   flvUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".flv"+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+flvAuthKey;
  }
  System.out.println("RTMP播放地址为: "+rtmpUrl);
  System.out.println("m3u8播放地址为: "+hlsUrl);
  System.out.println("flv播放地址为: "+flvUrl);
 }
public static void main(String[] args) {
  // TODO Auto-generated method stub
  //生成长度为5的随机字符串作为appName和streamName(字母和数字组合)
  String appName = RandomStringUtils.randomAlphanumeric(5);;
  String streamName = RandomStringUtils.randomAlphanumeric(5);;
  
  long expireTime = 3600L;
  String pullDomain = "mxl-pull.pier39.cn";
  String pullKey = "querty1234";
    
     String pushDomain = "mxl-push.pier39.cn";
  String pushKey = "querty123";
  Create_Live_Url.general_pull_url(pullDomain, pullKey, appName, streamName, expireTime);
  Create_Live_Url.generate_push_url(pushDomain, pushKey, appName, streamName, expireTime);
 }

}
相关文章
|
5月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
453 6
|
5月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
365 98
|
6月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
793 3
|
6月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
518 0
Java API 开发者
190 0
|
6月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
253 0
|
7月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
215 2
|
8月前
|
安全 Java 网络安全
Java 实现 SMTP 协议调用的详细示例及实战指南 SMTP Java 调用示例
本文介绍了如何使用Java调用SMTP协议发送邮件,涵盖SMTP基本概念、JavaMail API配置、代码实现及注意事项,适合Java开发者快速掌握邮件发送功能集成。
911 0

热门文章

最新文章