直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址。

PHP代码示例

视频直播生成推流地址和播放地址的PHP示例代码如下所示。?php

function push_url($push_domain,$push_key,$expireTime,$appName,$streamName){

$push_url = '';

//未开启鉴权Key的情况下

if($push_key==''){

$push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName;

echo $push_url;

return;

}

$timeStamp = time() + $expireTime;

$sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$push_key;

$md5hash = md5($sstring);

$push_url = 'rtmp://'.$push_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$md5hash;

echo $push_url;

echo PHP_EOL;

return;

}

function play_url($play_domain,$play_key,$expireTime,$appName,$streamName){

//未开启鉴权Key的情况下

if($play_key==''){

$rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName;

$flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv';

$hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8';

}else{

$timeStamp = time() + $expireTime;

$rtmp_sstring = '/'.$appName.'/'.$streamName.'-'.$timeStamp.'-0-0-'.$play_key;

$rtmp_md5hash = md5($rtmp_sstring);

$rtmp_play_url = 'rtmp://'.$play_domain.'/'.$appName.'/'.$streamName.'?auth_key='.$timeStamp.'-0-0-'.$rtmp_md5hash;

$flv_sstring = '/'.$appName.'/'.$streamName.'.flv-'.$timeStamp.'-0-0-'.$play_key;

$flv_md5hash = md5($flv_sstring);

$flv_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.flv?auth_key='.$timeStamp.'-0-0-'.$flv_md5hash;

$hls_sstring = '/'.$appName.'/'.$streamName.'.m3u8-'.$timeStamp.'-0-0-'.$play_key;

$hls_md5hash = md5($hls_sstring);

$hls_play_url = 'http://'.$play_domain.'/'.$appName.'/'.$streamName.'.m3u8?auth_key='.$timeStamp.'-0-0-'.$hls_md5hash;

}

echo 'rtmp播放地址: '.$rtmp_play_url;

echo PHP_EOL;

echo 'flv播放地址: '.$flv_play_url;

echo PHP_EOL;

echo 'hls播放地址: '.$hls_play_url;

echo PHP_EOL;

return;

}

//推流域名

$push_domain = 'testpush.cn';

//推流域名配置的鉴权Key

$push_key = 'test_Push_key';

//生成随机的AppName

$appName = md5(uniqid(microtime(true),true));

//生成随机的StreamName

$streamName = md5(uniqid(microtime(true),true));

//配置过期时间为1小时

$expireTime = 3600;

//播放域名

$play_domain = 'testPlay.cn';

//播放域名配置的鉴权Key

$play_key = 'test_play_key';

push_url($push_domain,$push_key,$expireTime,$appName,$streamName);

play_url($play_domain,$play_key,$expireTime,$appName,$streamName);

?>

Java代码示例

视频直播生成推流地址和播放地址的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);

}

}

推流地址 java_如何通过代码生成推流地址和播放地址?相关推荐

  1. 正则表达式判断是否mac地址 java_使用正则表达式判断字符串是否为MAC地址

    今天Boss给了一个小任务,要求给定一个字符串,判断该字符串是否是MAC地址,并用Java和正则表达式实现.于是我顺便百度了下MAC地址,并在cmd下使用getmac获取本机的MAC地址,了解了一点后 ...

  2. java rtmp推流_视频直播生成推流和播放地址的Java代码示例

    概述 直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放.本文主要介绍如何生成直播的推流以及播放地址. 详细信息 视频直播生成推流和播放地址的 ...

  3. 视频直播生成推流和播放地址的Java代码示例

    视频直播生成推流和播放地址的Java示例代码如下所示. import java.math.BigInteger; import java.security.MessageDigest; import ...

  4. 【常见问题】云视通开放平台播放地址有效期

    关于视频播放地址有效期的疑问 很多开发者看到了官网的接口文档后(如下图内容),心里会有个疑问,这些获取到的视频播放地址,它的有效期是多久呢? 这个问题我们拆开来看 怎么样才能拿到这个播放地址呢? 首先 ...

  5. 流媒体服务器EasyNVR怎样获取视频流的播放地址?

    很多用户要求在视频直播的过程中,直播画面或者链接是可以进行分享的,以便更多的人能够看到,这一项要求被运用在很多监管平台当中. 在我们的流媒体服务器EasyNVR中可以通过多种方式获得播放地址,本文就为 ...

  6. 安卓rtmp推流app_直播-腾讯云推流-sdk 播放地址不正确的解决方案---蜻蜓系统-uniapp-flutter通用...

    直播-腾讯云推流-sdk 播放地址不正确的解决方案---蜻蜓系统-uniapp-flutter通用 方法文件: /app/Services/LiveService.php 这个问题耽误了时间,有必要记 ...

  7. obs多推流地址_OBS如何进行多路推流

    多路推流 即一次直播在多平台上实时直播显示,一对多实现多路推流.目前市面上的多路推流软件的大部分都是收费的,今天给大家介绍如何利用OBS实现多路推流. 下载OBS软件和OBS插件 •OBS网址:htt ...

  8. 抓rtmp推流地址_如何获取第三方推流地址?

    微吼支持第三方推流发起直播,支持的协议是Rtmp,所以发起方使用第三方推流设备或软件推流需要支持Rtmp协议,获取第三方流地址操作方法如下: 1.登录电脑网页端,进入首页,找到创建好的直播列表(由于推 ...

  9. 高性能RTMP推流服务器软件EasyDSS如何支持推流摄像机推流直播进行云端录像存储及计划保存

    RTMP推流服务器 RTMP推流服务器EasyDSS: 提供设备接入: RTMP推流服务.RTMP分发.HLS分发.HTTP-FLV分发:云端录像.云端录像检索.云端录像点播.云端录像下载: RTMP ...

最新文章

  1. Missing space before value for key 'path'vue.js解决空格报错
  2. [导入]IIS无法显示asp页面
  3. 物联网管理软件的设计
  4. 华为新系统鸿蒙有哪些手机_华为鸿蒙OS系统传来新消息!外媒宣布:未来几年内华为手机都将无缘...
  5. Comet OJ - Contest #0题解
  6. 记一次使用EasyExcel出现Convert excel format exception.You can try specifying the ‘excelType‘ yourself
  7. 利用身体记忆GRE词汇
  8. CAD卸载/完美解决安装失败/如何彻底卸载清除干净cad各种残留注册表和文件的方法
  9. python开三次方_用python计算三次方根
  10. _spellmod_leech_spell
  11. 应用容器化之Kubernetes实践
  12. Flask邮件的配置和使用
  13. 管理学生营养餐很重要
  14. Linux MySQL数据库的备份
  15. python时间戳是什么意思_Python-时间戳
  16. php面向对象--php面向对象ppt
  17. 数字化工厂:车间智能工位机详解
  18. 『tensorflow笔记』tf.argmax()和tf.equal()的使用
  19. 解决Eclipse下Tomcat将项目部署到.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps下
  20. 日报(2019.7.4 -- 12.30)

热门文章

  1. STM32F3 GPIO的八种模式及工作原理
  2. vivo s12参数
  3. 腾讯云轻量服务器蜂驰版测评及横向对比
  4. 嵌入式之uboot源码分析-启动第一阶段学习笔记
  5. 计算机excel公式2010,计算机二级Office2010Eexcel公式汇总
  6. 鼠标指针(光标)变成黑方块的解决方法
  7. live2d看板娘一览图
  8. 对m720蓝牙优联已配对设备进行更换
  9. 三星打印机SCX-4824HN全套驱动(打印/扫描)
  10. 计算机组成中位、字节、字、字长、存储单元、存储字、存储字的辨析