哈嚕~進來看這篇文章的你,如果不是想增廣見聞、學習新知,就是想多了解一些好用來壞壞。
我們雖然常常直接叫「PSSH」但實際上完整名稱是「PSSH BOX」,不過大家都直接忽略了BOX直接稱PSSH。
那PSSH BOX是什麼?根據我自己看文章並翻譯理解內容,BOX是一段字串,該字串內包含有串流媒體相關識別碼的物件導向建構塊,你問我在說什麼?我也不了。
總之我自己是這樣理解的,PSSH BOX是一串含有一大堆資訊並且用來識別串流媒體的認證碼。
拿「串流媒體 DASH mpd — ( 2 )」這一篇裡面所提到的PSSH字串來進行分析。
<ContentProtection value="Widevine" schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh>AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuql0dNLWg==</cenc:pssh>
為了講解先用線上工具將這串PSSH轉換成十進制,忘了先說PSSH一般都是採用Base64編碼的形式。
現在我們將Base64的PSSH轉換成十進制
AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuql0dNLWg==
轉換成十進制後會長得像下方這樣
[ 0 0 0 52 112 115 115 104 0 0 0 0 237 239 139 169 121 214 74 206 163 200 39 220 213 29 33 237 0 0 0 20 8 1 18 16 110 90 29 38 39 87 71 215 128 70 234 165 209 211 75 90 ]
黃色部分 表示整個PSSH BOX的長度有52字節
綠色部分 則是定義類型,在這邊是對應ASCII編碼表格中的PSSH這四個字符
藍色部分 表示ISO-BMFF中特定的字符
粉色部分 則是系統ID,意思是屬於DRM裡面的那種類型,例如:PlayReady, Widevine和Fairplay
灰色部分 表示PSSH BOX資料的大小
其他剩下的字節對應的就是邊適用的數據,例如:影片和音頻的KID…等等。
如果是將Base64的PSSH轉換成十六進制後則是會長得像下方這樣
[ 00 00 00 34 70 73 73 68 00 00 00 00 ED EF 8B A9 79 D6 4A CE A3 C8 27 DC D5 1D 21 ED 00 00 00 14 08 01 12 10 6E 5A 1D 26 27 57 47 D7 80 46 EA A5 D1 D3 4B 5A ]
黃色部分 表示整個PSSH BOX的長度有52字節,十六進制的34對應的是十進制的52。
綠色部分 則是定義類型,在這邊是對應ASCII編碼表格中的PSSH這四個字符
藍色部分 表示ISO-BMFF中特定的字符
粉色部分 則是系統ID,意思是屬於DRM裡面的那種類型,例如:ED EF 8B A9 79 D6 4A CE A3 C8 27 DC D5 1D 21 ED 就是Widevine的UUID(上面有UUID可以往上拉進行比對)
灰色部分 表示PSSH BOX資料的大小
剩餘其他字節對應的就是數據內容,例如:影片和音頻的KID…等等。