ID3標籤

上次更新: 2023-09-21

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

此頁面上的