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

本頁內容