ID3標籤提供音訊或視訊檔案的相關資訊,例如檔案的標題或藝術家的姓名。 瀏覽器TVSDK會在HLS串流的傳輸串流(TS)區段層級偵測ID3標籤,並派單事件。 應用程式可從標籤擷取資料。
當在基礎HLS串流中找到新的ID3中繼資料時,瀏覽器TVSDK會觸發AdobePSDK.TimedMetadataEvent
事件。
ID3的TimedMetadata
物件具有下列屬性:
屬性名稱 | 詳細資訊 |
---|---|
type |
TimedMetadata 物件類型。 對於ID3中繼資料,其值為 AdobePSDK.TimedMetadataType.ID3 。 |
時間 |
偵測到此計時中繼資料的播放器時間。 |
id |
TimedMetadata 物件的ID。 |
名稱 |
TimedMetadata 物件的名稱。 對於ID3中繼資料,值為「ID3」。 |
內容 |
計時中繼資料內容。 對於ID3標籤,此值代表序號位元組陣列。 |
中繼資料 |
TimedMetadata 處理的資訊,此資訊是 AdobePSDK的例項。儲 存ID3影格的中繼資料。
注意: 對於Safari 視訊標籤,ID3標籤的特定影格資料會透過 AdobePSDK.Metadata 物件以物件形式公開,而對於其他瀏覽器,ID3標籤的影格資料則會透過 AdobePSDK.Metada5>物件。 |
應用程式可透過下列兩種方式擷取儲存在TimedMetadata
中的各種ID3標籤:
在AdobePSDK.PSDKeventType.TIMED_METADATA_AVAILABLE事件偵聽器中。
var isSafari = function () {
var nAgt = navigator.userAgent;
var appName = navigator.appName;
if ((nAgt.indexOf('MSIE') === -1) && //is not MS IE
(appName !== 'Netscape' || nAgt.indexOf('Trident/') === -1) && //is not MS IE11
(appName !== 'Netscape' || nAgt.indexOf('Edge') === -1) && // is not edge
(nAgt.indexOf('Chrome') === -1) && // is not chrome
(nAgt.indexOf('Safari') !== -1) //is Safari
){
return true;
}
return false;
};
var hex2a = function (hex, offset, max) {
var str = '';
if (!hex)
return str;
for (var i = offset; i < hex.length && i < offset + max; i++)
str += String.fromCharCode(hex[i]);
return str;
};
var mediaPlayer = new AdobePSDK.MediaPlayer();
mediaPlayer.addEventListener( AdobePSDK.PSDKEventType.TIMED_METADATA_AVAILABLE ,function(event){
var td = event.timedMetadata;
if(td.type == AdobePSDK.TimedMetadataType.ID3){
var md = td.metadata;
var keySet = md.keySet;
var onSafari = isSafari();
if(keySet && keySet.length){
var msg = '';
for(var j = 0; j < keySet.length; j++){
var idTag = keySet[j];
msg += idTag;
if(idTag.indexOf("T") == 0){
/* text frame*/
if(onSafari){
/* text frame data is exposed in object format
* where corresponding text data is exposed through
* data key of text frame data object
* */
var frameDataObject = md.getObject(idTag);
msg += " : " + frameDataObject.data;
} else {
var buff = md.getByteArray(idTag);
msg += " : " + hex2a(buff, 0, buff.length - 1);
}
}
msg += " ; ";
}
}
}
});
使用MediaPlayerItem
的timedMetadata
屬性。
var isSafari = function () {
var nAgt = navigator.userAgent;
var appName = navigator.appName;
if ((nAgt.indexOf('MSIE') === -1) && //is not MS IE
(appName !== 'Netscape' || nAgt.indexOf('Trident/') === -1) && //is not MS IE11
(appName !== 'Netscape' || nAgt.indexOf('Edge') === -1) && // is not edge
(nAgt.indexOf('Chrome') === -1) && // is not chrome
(nAgt.indexOf('Safari') !== -1) //is Safari
){
return true;
}
return false;
};
var hex2a = function (hex, offset, max) {
var str = '';
if (!hex)
return str;
for (var i = offset; i < hex.length && i < offset + max; i++)
str += String.fromCharCode(hex[i]);
return str;
};
var timedMetadataList = player.currentItem.timedMetadata;
for(var i = 0; i < timedMetadataList.length; i++){
var td = timedMetadataList[i];
if(td.type == AdobePSDK.TimedMetadataType.ID3){
var md = td.metadata;
var keySet = md.keySet;
var onSafari = isSafari();
if(keySet && keySet.length){
var msg = '';
for(var j = 0; j < keySet.length; j++){
var idTag = keySet[j];
msg += idTag;
if(idTag.indexOf("T") == 0){
/* text frame*/
if(onSafari){
/* text frame data is exposed in object format
* where corresponding text data is exposed through
* data key of text frame data object
* */
var frameDataObject = md.getObject(idTag);
msg += " : " + frameDataObject.data;
} else {
var buff = md.getByteArray(idTag);
msg += " : " + hex2a(buff, 0, buff.length - 1);
}
}
msg += " ; ";
}
}
}
}