ID3標籤

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 += " ; ";
                }
            }
        }
    });
    
  • 使用MediaPlayerItemtimedMetadata屬性。

    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 += " ; ";
                }
            }
        }
    }
    

本頁內容