筆記一下 去年做的一個視頻在線轉碼系統筆記
能解決
-
上傳視頻 后台自動轉碼系統;
-
上傳視頻完成立刻獲取播放代碼;
上傳視頻后台轉碼系統
網絡上能直接播放的視頻通常不是我們拍攝器材 直接拍攝的格式 例如 ( fmpeg,avi,rm,wov mkv 等)。 這些格式的文件是不能直接在網絡上進行在線播放的;鑒於之前有客戶需要一個能在線 直接上傳上面任意視頻格式 讓后播放這個視頻 這個需求,幾經研究 我開發了一個能在線直接上傳並轉碼為在線直接播放視頻的系統。系統提供API接口,后台發布內容的時候上傳任意視頻 調用接口 放回播放地址,系統后台完成轉碼;
傳統的視頻轉碼方式
一 調用主流視頻網站地址
例如我要建立一個網站 ,網站中希望能播放視頻, 通常的做法是吧這些視頻上傳到 主流的視頻網站 例如 youku 騰訊等視頻網站 讓后再通過他們的視頻播放地址 再嵌入到我們的網頁中 這樣的方式也可以達到目的; 只是他們可能會在你的視頻播放的時候加上廣告 打上他們的logo;
二 本地通過轉碼軟件
本地通過轉碼軟件吧 視頻轉換為flv 或者mp4 這些能網絡播放的格式 然后再上傳 通過播放器播放這個地址; 這能解決問題,但是會比較麻煩 要線下手動處理;
在線視頻轉碼系統
例如 我的一個客戶 在他的新聞發布系統中(CMS) 以前要發布新聞 新聞中有視頻 他們通常是吧視頻傳到外面的視頻網站youku 上,然后用優酷的播放地址;后來通過我們的在線轉碼系統 他們把視頻通過一上傳組件把視頻傳給我我們系統的接口 我們系統直接給返回播放代碼,無需修改任意功能和代碼 直接把放回的播放代碼插入新聞中即可播放;
-
獨立部署 不影響已有的系統;
-
提供接口 方便集成已有的老系統;
-
支持分布式部署
接口文檔說明
(1) 上傳視頻接口
POST /admin/Upload/upload
上傳視頻文件,注意視頻文件字段為file, 類型為file類型;
參數
參數 | 類型 | 是否必填 | 說明 |
---|---|---|---|
file |
file | 是 | 上傳文件字段"file" 字段類型也是file |
width | number | 否 | 自定義播放器寬度 ;默認為 800 |
height | number | 否 | 自定義播放器高度 ;默認為 500 |
# 參考案例
curl -X POST \
http://video-transcode.xxxx.net:81/admin/Upload/upload \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F file=@fj1.mp4
返回值
# 注意上傳放回的為原始視頻,不要用這個地址類播放 這個視頻很大;
# 上傳成功后 攜帶 ID 回調請求 獲取播放地址接口例如: /admin/play/15
{
"status": 1,
"info": "上傳成功",
"data": {
"ext": "mpeg",
"savename": "1.mpeg",
"filename": "18b93553d62352efa0216b463a92ed63.mpeg",
"size": "17M"
},
"upinfo": {
"name": "1.mpeg",
"type": "video/mpeg",
"tmp_name": "/tmp/phpddldpC",
"error": 0,
"size": 18251036
},
"id": "20",
"task_status": 1,
"html": { # 播放器代碼
"iframe": "<iframe height=300 width=500 src=http://video-transcode2.xxx.net:81/api/Video/play?id=20></iframe>",
"page": "http://video-transcode2.03in.net:81/api/Video/play?id=20"
}
}
(2) 獲取播放視頻代碼
GET /api/getplay/12
參數
參數 | 類型 | 說明 |
---|---|---|
id | string | 視頻ID, API后面直接加上即可 |
關於播放視頻地址說明; 上傳的視頻不能立刻播放;因為還是在轉碼過程中;需要等待視頻轉碼完成才能播放,轉碼的時間長度和視頻大小相關。
實例
curl -X GET \
http://video-transcode.xxxxx.net:81/api/getplay/12 \
-H 'cache-control: no-cache' \
返回
# 返回實例
{
"info": "播放地址",
"html": "<iframe height=400 width=510 src=http://video-transcode2.xxxx.net:81/api/Video/play?id=12></iframe>",
"url": "http://video-transcode2.xxxx.net:81/api/Video/play?id=12>"
}