這篇文章主要是介紹阿里雲直播開發中的一些坑,不是很詳細,由於關於開發相關的資料網上有不少,可是關於坑的文章有不多,若是有啥不懂的能夠下方評論,一塊兒交流~~~~
簡單介紹一下拉流和推流以及推流拉流地址拼接,剩下的主要是講坑,注意拉流和播流的意思是同樣的。
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