阿里視頻點(diǎn)播
前言
筆者在開發(fā)過程中需要使用視頻流的方式開發(fā)視頻田藐,如何選擇正確的流媒體服務(wù)器呢?市面上有很多的流媒體服務(wù)器,這里給大家介紹下阿里的視頻服務(wù):視頻點(diǎn)播恨溜,媒體轉(zhuǎn)碼,視頻直播
什么是視頻點(diǎn)播
阿里云視頻點(diǎn)播(VoD)是集音視頻采集找前、編輯糟袁、上傳、自動(dòng)化轉(zhuǎn)碼處理躺盛、媒體資源管理项戴、分發(fā)加速、視頻播放于一體的一站式音視頻點(diǎn)播解決方案槽惫。
視頻點(diǎn)播服務(wù)構(gòu)建在阿里云強(qiáng)大的基礎(chǔ)設(shè)施服務(wù)之上周叮,借助靈活和可伸縮的存儲(chǔ)、高質(zhì)量的視頻轉(zhuǎn)碼處理技術(shù)界斜,以及穩(wěn)定快速的內(nèi)容分發(fā)服務(wù)仿耽,幫助企業(yè)和開發(fā)者快速搭建安全、彈性各薇、高可定制的點(diǎn)播平臺(tái)和應(yīng)用项贺。
視頻點(diǎn)播服務(wù)提供Web管理控制臺(tái)和軟件開發(fā)工具包(API+SDK)。您可以通過它們使用、管理視頻點(diǎn)播服務(wù)敬扛,也可以與您自己的應(yīng)用和服務(wù)集成晰洒。
所有服務(wù)按使用付費(fèi),服務(wù)能力自動(dòng)伸縮啥箭,告別復(fù)雜的架構(gòu)設(shè)計(jì)和編程開發(fā)谍珊,維護(hù)成本幾近于零,使您可以專注于業(yè)務(wù)邏輯實(shí)現(xiàn)及最終用戶體驗(yàn)的提升急侥。(說實(shí)在砌滞,阿里云的視頻點(diǎn)播的文檔寫的不咋滴)
阿里視頻點(diǎn)播服務(wù)價(jià)格:
首先要購(gòu)買視頻點(diǎn)播服務(wù),阿里云的價(jià)格有四種:2216(元)/年坏怪、6488(元)/年贝润、19900(元)/年、49900(元)/年
如何購(gòu)買根據(jù)自己的需求铝宵,
當(dāng)購(gòu)買完成之后阿里會(huì)給你分配兩個(gè)key(上傳視頻和播放視頻都需要用到這兩個(gè)數(shù)據(jù)):Access Key ID Access Key Secret
如何使用
上傳視頻有四種:1打掘、JavaScript上傳視頻、IOS上傳視頻鹏秋、Android上傳視頻尊蚁、Java上傳視頻
;
這里介紹下JavaScript上傳視頻侣夷。
我們先看下阿里的 demo
其實(shí)我們只要注意第一個(gè)點(diǎn)播上傳配置就ok了横朋,使用點(diǎn)播配置上傳需要獲取上傳憑證和上傳地址(這里使用到JAVA版本),另外還有PHP版本和Python版本
生成憑證和地址代碼(簡(jiǎn)化了一些可選代碼):
public static CreateUploadVideoResponse createUploadVideo(CoursewareInfoVo vo) {
DefaultAcsClient aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile("cn-shanghai",accessKeyId,accessKeySecret));
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
CreateUploadVideoResponse response = null;
try {
/*必選百拓,視頻源文件名稱(必須帶后綴, 支持 "3GP","AVI","FLV","MP4","M3U8","MPG","ASF","WMV","MKV","MOV","TS","WebM","MPEG","RM","RMVB","DAT","ASX","WVX","MPE","MPA","F4V","MTS","VOB","GIF")*/
request.setFileName(vo.getFileName());上傳的視頻文件名稱
//必選琴锭,視頻源文件字節(jié)數(shù)
request.setFileSize(Long.valueOf(vo.getSize()));上傳視頻的大小
//必選,視頻標(biāo)題
request.setTitle(vo.getFileName()); 上傳視頻的標(biāo)題
response = aliyunClient.getAcsResponse(request);
} catch (ServerException e) {
System.out.println("CreateUploadVideoRequest Server Exception:");
e.printStackTrace();
} catch (ClientException e) {
System.out.println("CreateUploadVideoRequest Client Exception:");
e.printStackTrace();
}
System.out.println("UploadAuth:"+response.getUploadAuth());
System.out.println("UploadAddress:"+response.getUploadAddress());
System.out.println("videoId:"+response.getVideoId()); videoId很重要衙传,后續(xù)播放的時(shí)候需要用到决帖,要記得保存
return response;
}
前端的js代碼:
這里引入
<script src="aliyun-sdk.min.js"></script>
<script src="vod-sdk-upload-1.0.6.min.js"></script>
初始化上傳的js
window.onload = new function() {
uploader = new VODUpload({
// 文件上傳失敗
'onUploadFailed': function (uploadInfo, code, message) {},
// 文件上傳完成
'onUploadSucceed': function (uploadInfo) {},
// 文件上傳進(jìn)度
'onUploadProgress': function (uploadInfo, totalSize, uploadedSize) {
aliyunProgress(Math.ceil(uploadedSize * 100 / totalSize));
},
// STS臨時(shí)賬號(hào)會(huì)過期,過期時(shí)觸發(fā)函數(shù)
'onUploadTokenExpired': function () {
// 實(shí)現(xiàn)時(shí)粪牲,從新獲取UploadAuth
// uploader.resumeUploadWithAuth(uploadAuth);
},
// 開始上傳
'onUploadstarted': function (uploadInfo) {
uploadAuth,uploadAddress 這兩個(gè)參數(shù)是通過上面的代碼傳到前臺(tái)
uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress);
}
});
if (isVodMode()) {
// 點(diǎn)播上傳古瓤。每次上傳都是獨(dú)立的鑒權(quán),所以初始化時(shí)腺阳,不需要設(shè)置鑒權(quán)
uploader.init();
}
};
function start() {
uploader.startUpload();
aliyunProgress(0);
}
function stop() {
uploader.stopUpload();
}
function resumeWithToken() {
var uploadAuth = document.getElementById("uploadAuth").value;
if (isVodMode()) {
uploader.resumeUploadWithAuth(uploadAuth);
}
}
function clearList() {
uploader.cleanList();
}
function deleteFile() {
if (document.getElementById("deleteIndex").value) {
var index = document.getElementById("deleteIndex").value
log("delete file index:" + index);
uploader.deleteFile(index);
}
}
添加視頻到 uploader的中
<form action="">
<input type="file" name="file" id="files" multiple/>
</form>
document.getElementById("files").addEventListener('change', function (event) {
for(var i=0; i<event.target.files.length; i++) {
上傳時(shí)落君,可以選擇是否啟用水印和優(yōu)先級(jí),userData是一個(gè)json對(duì)象亭引。第一級(jí)的Vod是必須的绎速,Vod下面有2個(gè)屬性,示例如下:
var userData = '{"Vod":{"UserData":"{"IsShowWaterMark":"false","Priority":"7"}"}}';
uploader.addFile(event.target.files[i], null, null, null, userData);
}
});
然后調(diào)用 uploader.startUpload() 方法就可以實(shí)現(xiàn)上傳
操作截圖
選擇上傳的視頻文件
讀取視頻信息獲取到阿里的uploadAuth和uplaodAddress后點(diǎn)擊開始上傳 uploader.startUpload()
上傳的進(jìn)度可以在onUploadProgress方法中實(shí)現(xiàn)焙蚓,這樣阿里云的視頻就上傳完成了纹冤,接下來就是如何調(diào)用視頻
瀏覽上傳視頻
1洒宝、獲取播放憑證阿里視頻點(diǎn)播獲取播放憑證JAVA版,另外還有PHP版本和Python版本
代碼如下:
public static GetVideoPlayAuthResponse getVideoPlayAuth(String videoId) {
DefaultAcsClient aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile("cn-shanghai",accessKeyId,accessKeySecret));
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
request.setVideoId(videoId);
GetVideoPlayAuthResponse response = null;
try {
response = aliyunClient.getAcsResponse(request);
} catch (ServerException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Server failed");
} catch (ClientException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Client failed");
}
response.getPlayAuth(); //播放憑證
response.getVideoMeta(); //視頻Meta信息
return response;
}
2萌京、web端播放 Web播放器SDK
(此外還有android版本播放和ios版本播放)
代碼如下(簡(jiǎn)化版):
http://g.alicdn.com/de/prismplayer/1.7.6/prism-h5-min.js
http://g.alicdn.com/de/prismplayer/1.7.6/skins/default/index-min.css
var player= new prismplayer({
id: 'J_prismPlayer',
width:'100%',
height:$("#player").height()+"px",
autoplay: true,
vid : videoId,
playauth :playAuth 后臺(tái)獲取到的
});
預(yù)覽效果如圖
總結(jié)
阿里視頻點(diǎn)播服務(wù)雁歌,還有其功能,這里通過阿里的文檔簡(jiǎn)單的介紹下創(chuàng)建自己的流媒體服務(wù)器級(jí)使用方法知残,筆者是做java開發(fā)的靠瞎,在開發(fā)中其實(shí)會(huì)用到很多的功能插件,后面會(huì)記錄下來求妹,同大家分享乏盐,也歡迎大家留言
微信公眾號(hào)及ahpome的博客求關(guān)注