这篇文章主要是介绍阿里云直播开发中的一些坑,不是很详细,由于关于开发相关的资料网上有不少,可是关于坑的文章有不多,若是有啥不懂的能够下方评论,一块儿交流~~~~
简单介绍一下拉流和推流以及推流拉流地址拼接,剩下的主要是讲坑,注意拉流和播流的意思是同样的。
1、拉流和推流前端
(1)什么是拉流:拉流顾名思义就是播放(详细解释能够百度)跨域
(2)什么是推流:推流,指的是把采集阶段封包好的内容传输到服务器的过程
2、直播配置服务器
详情看文档或者百度,有不少资料app
3、推流播流地址拼接
废话很少说直接上代码阿里云
// 时间戳 long time=timeConversion(lapseTime);//时间戳能够动态生成,代码参考下面的时间戳生成代码 // APP名称 String appName="APP名称"; // 摄像头编号名称 String streamName=cloudEyeId; // 播流域名 String playHost="播流域名"; // 推流域名 String pushHost="推流域名"; // 推流鉴权主key String pushKye="推流鉴权主key"; // 播放鉴权主key String playKye="播放鉴权主key"; // 随机数不要有下划线 //随机数能够为o String rand=UUIDGenerator.generate(); // 加密 String strPlay="/"+appName+"/"+streamName+"-"+time+"-0-0-"+playKye; String strPush="/"+appName+"/"+streamName+"-"+pushTime+"-0-0-"+pushKye; // 播放流拼接rtmp String playUrl="rtmp://"+playHost+"/"+appName+"/"+streamName+"?auth\_key="+time+"-0-0-"+DigestUtils.md5Hex(strPlay); // 推流拼接rtmp String pushUrl="rtmp://"+pushHost+"/"+appName+"/"+streamName+"?auth\_key="+pushTime+"-0-0-"+ DigestUtils.md5Hex(strPush); System.out.println(">>>>>>>>>>>>>>>播流地址"+playUrl); System.out.println(">>>>>>>>>>>>>>>m3u8"+m3u8); System.out.println(">>>>>>>>>>>>>>>推流地址"+pushUrl);
时间戳生成 注意鉴权过时时间不要毫秒这是一个坑文档有写必定要注意!!!!加密
Long time = System.currentTimeMillis(); time += startTime \* 1000 \* 60; //当前时间加上30分钟 s=(new Date(time).getTime()/1000);
4、为何你的鉴权时间没有过时?spa
怎么查看鉴权时间过不过时,若是你设置了鉴权时间,在过时时间用vlc播放播流地址,播放不了说明,时效时间生效了code
这是一个特别大的坑,在保证你代码准确,并且配置正确的前提下,若是你的鉴权时间到了,你的播流地址没有过时,**是由于播流过时时间是你的后台过时时间+你代码设置的过时时间=失效时间
意思就是你视频直播控制台设置了10分钟的时效时间,而你代码也设置了10分钟的时效时间,这样时效时间就成了20分钟。**
5、直播录像的一些坑视频
1.为啥你的m3u8地址播放不了?
仍是在你配置正确的前提下,你的录像m3u8地址播放不了是由于两个缘由:(1)前端跨域问题(这个不详细解释) (2)oss权限问题,若是你的录像文件存到oss服务器上,若是你要访问须要权限,若是你仔细查看文档,文档会让你经过签名的方式去访问。签名代码以下。
上图中的type不要管是什么,和签名没有关系,必定要注意红框中req.setProcess 这个又是一个坑,若是你不写这个你签完名之后你仍是访问不了你的m3u8地址,为何呢?
由于你签名只签名了你的m3u8的文件,那m3u8相关的ts文件你没有签名,因此加上req.setProcessblog