ID3標籤提供音訊或視訊檔案的相關資訊,例如檔案標題或藝人姓名。 瀏覽器TVSDK會在HLS資料流的傳輸資料流(TS)區段層級偵測ID3標籤,並傳送事件。 應用程式可從標籤中擷取資料。
在基本HLS資料流中找到新的ID3中繼資料時,瀏覽器TVSDK會觸發 AdobePSDK.TimedMetadataEvent
事件。
此 TimedMetadata
ID3的物件具有下列屬性:
屬性名稱 | 詳細資料 |
---|---|
type |
一種型別 TimedMetadata 物件。 對於ID3中繼資料,值為 AdobePSDK.TimedMetadataType.ID3 . |
時間 |
偵測到此計時中繼資料的播放器時間。 |
id |
ID TimedMetadata 物件。 |
名稱 |
名稱 TimedMetadata 物件。 對於ID3中繼資料,值為「ID3」。 |
內容 |
定時中繼資料內容。 對於ID3標籤,此值代表序列化的位元組陣列。 |
中繼資料 |
TimedMetadata 已處理的資訊,其例項為 AdobePSDK.Metadata 儲存ID3影格的位置。
注意:適用於Safari 視訊 標籤,ID3標籤的特定框架資料會透過 AdobePSDK.Metadata 物件,而若是其他瀏覽器,ID3標籤的框架資料會以位元組陣列的形式透過下列方式顯示 AdobePSDK.Metadata 物件。 |
儲存在中的各種ID3標籤 TimedMetadata
應用程式可透過下列兩種方式擷取:
在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 += " ; ";
}
}
}
}