問(wèn)題描述:
項(xiàng)目是用koa + gulp框架搭的扛门,代碼年代比較久遠(yuǎn)了沮明。
突然客服反饋了一個(gè)問(wèn)題,視頻播放是用flash打開(kāi)窖逗,啊佑附,chrome最新版已經(jīng)禁止使用flash播放了,蛋疼芽唇。
排查問(wèn)題:
此前對(duì)這個(gè)項(xiàng)目的業(yè)務(wù)不太熟悉匆笤,只能硬著頭皮,一個(gè)個(gè)排查了谱邪。
生產(chǎn)才有此視頻格式炮捧,果斷開(kāi)啟fiddler的代理模式,將生產(chǎn)代碼映射到本地惦银。
再看代碼咆课,發(fā)現(xiàn)html中用的是gs:video-vod
對(duì)這個(gè)標(biāo)簽不熟悉,百度后才知道是gensee提供的
遂找到官方文檔
接下來(lái)首先是熟悉下gssdk的api文檔了
gssdk的使用
- 需要引入的javascript
<script type="text/javascript" src="http://static.gensee.com/webcast/static/sdk/js/gssdk-1.3.js"></script>
- html 命名空間
<html xmlns:gs="http://www.gensee.com/ec">
- Vod Video Widget 標(biāo)簽配置
<gs:video-vod id="videoComponent" site="192.168.0.168" ctx="webcast" ownerid="f8625298d18042fbbba7a8" uid="55831" uname="user5623" authcode="333333"/>
屬性說(shuō)明:
- Id: html的元素ID扯俱。(可選)用戶可自行指定书蚪。SDK將以此ID作為Widget ID。
- ctx: 服務(wù)選項(xiàng)迅栅∈庑#可選值為webcast或training。無(wú)此屬性說(shuō)明默認(rèn)使用webcast服務(wù)读存。
- site: 站點(diǎn)域名 (必填)Example:www.gensee.com
- ownerid: webcast服務(wù)下为流,表示點(diǎn)播ID ;training服務(wù)下让簿,表示課件ID(必填)
- uid: 用戶ID (可選)敬察。若無(wú)此屬性,系統(tǒng)會(huì)自動(dòng)生成隨機(jī)UID尔当。為了避免uid跟Gensee系統(tǒng)的內(nèi)部用戶ID沖突莲祸,該uid要求必須大于1000000000 小于9007199254740992
- uname: 用戶名稱(可選)。若無(wú)此屬性居凶,系統(tǒng)自動(dòng)生成英文隨機(jī)名稱虫给。若點(diǎn)播(課件)要求登錄藤抡,則用戶名稱必須是系統(tǒng)的登錄賬號(hào)侠碧。注:登錄方式無(wú)論是賬號(hào)密碼或手機(jī)動(dòng)態(tài)密碼,接口只能使用賬戶登錄缠黍。
- authcode: (可選)校驗(yàn)碼弄兜。對(duì)應(yīng)點(diǎn)播(課件)的web端口令。若點(diǎn)播(課件)要求輸入口令,則此屬性必填替饿。否則不需要语泽。
- encodetype: 指定authcode的編碼方式。值若為md5视卢,則authcode必須經(jīng)過(guò)MD5的32位小寫(xiě)編碼過(guò)踱卵。不寫(xiě)該屬性或者值為空,則authcode為明文据过。
- password: (可選)若點(diǎn)播(課件)要求登錄惋砂,此屬性表示登錄賬號(hào)的密碼。
- group: 分組名稱绳锅。(可選) 適用于不同點(diǎn)播(課件)的Widget放在同一個(gè)頁(yè)面中的情況西饵。Group用來(lái)標(biāo)示哪些Video和Doc Widget屬于同一個(gè)組。相同組內(nèi)的Widget可以共享通訊信息鳞芙。若不填眷柔,SDK會(huì)自動(dòng)將Widget歸屬到默認(rèn)組。
- k: 若直播開(kāi)啟第三方認(rèn)證功能原朝,則需要k值驗(yàn)證驯嘱。關(guān)于第三方認(rèn)證,請(qǐng)參看Gensee_URL_API_SPEC喳坠。
- lang: 指定語(yǔ)言宙拉。中文是zh_CN, 英文是 en,日文是ja丙笋。
- bgimg: 設(shè)置背景圖案谢澈,圖片URL地址。
- py: 設(shè)置點(diǎn)播是否自動(dòng)播放御板,值為1或者0锥忿。1表示自動(dòng)播放,0則表示手動(dòng)播放(移動(dòng)端該參數(shù)是否生效取決于終端瀏覽器是否兼容)
- video:設(shè)置點(diǎn)播是否使用音頻還是視頻怠肋,值為:true或者false敬鬓,true表示視頻,false表示音頻笙各,默認(rèn)情況true钉答。
- btnimg:設(shè)置播放按鈕圖案,圖片url地址杈抢。
- fullscreen:是否在flash視頻界面上顯示全屏操作按鈕数尿。可選值為true或者false惶楼。默認(rèn)值為false右蹦。(可選)
- gsver:采用何種技術(shù)的播放器(H5 Flash)诊杆。可選值為2或者其他何陆。默認(rèn)值為空
- post k值認(rèn)證方式晨汹,get請(qǐng)求或post請(qǐng)求〈ぃ可選值為true或者false淘这。默認(rèn)值為true。(可選)
- Doc Widget
- Id: html的element id巩剖。(可選)
- site: 站點(diǎn)域名(必填)
- ownerid: 點(diǎn)播或課件ID慨灭。(必填)
- group: 分組名稱。作用同Video Widget的Group屬性球及。(可選)
- ctx: 服務(wù)選項(xiàng)氧骤。可選值為webcast或training吃引。無(wú)此屬性說(shuō)明默認(rèn)使用webcast服務(wù)筹陵。(可選)
- fullscreen:是否支持flash全屏∧鞒撸可選值為true或者false朦佩。默認(rèn)值為false。(可選)
- bgcolor: 背景色庐氮。參考值:#00ff00语稠。默認(rèn)為空。(可選)
- bgimg: 設(shè)置背景圖案弄砍,圖片URL地址仙畦。
- gsver:采用何種技術(shù)的文檔模塊(SDK1.0/SDK2.0)∫羯簦可選值為2或者其他慨畸。默認(rèn)值為空
定位問(wèn)題
通過(guò)api了解到 gsver會(huì)影響資源的展示
看到資源傳的gsver=1,所以是用的flash播放器打開(kāi)衣式。
再看下代碼中g(shù)sver的實(shí)現(xiàn)
const updateDate = +new Date(2019, 0, 1);
const gsver = result.liveCourse.recordEndTime > updateDate ? 2 : 1;
console.log('###', result.liveCourse.recordEndTime)
打印result.liveCourse.recordEndTime寸士,發(fā)現(xiàn)是null
可能是早期的課程資源有的是用flash做的,所以用gsver=1播放
根據(jù)課程的錄制結(jié)束時(shí)間進(jìn)行判斷碴卧。如果是2019年后的用h5播放弱卡,之前的時(shí)間用flash播放。
終于找到問(wèn)題的根源住册,反饋給服務(wù)端婶博,可能是后臺(tái)設(shè)置recordEndTime的問(wèn)題
理解xmlns原理
從gs:video-vod
可以知道,這是一個(gè)自定義的標(biāo)簽界弧。
xmlns 屬性可以在文檔中定義一個(gè)或多個(gè)可供選擇的命名空間凡蜻。該屬性可以放置在文檔內(nèi)任何元素的開(kāi)始標(biāo)簽中搭综。該屬性的值類似于 URL垢箕,它定義了一個(gè)命名空間划栓,瀏覽器會(huì)將此命名空間用于該屬性所在元素內(nèi)的所有內(nèi)容。
在js中条获,可以通過(guò)dom操作忠荞,獲取該標(biāo)簽上對(duì)應(yīng)的字段,進(jìn)行一些邏輯處理帅掘,可以避免使用w3c的標(biāo)簽委煤,產(chǎn)生沖突。