http-live-streaming - 如何从 pssh 构建 PlayReady 对象

标签 http-live-streaming mpeg-dash widevine playready ott

我的 PlayReady PSSH-Box 如下(base64 和十六进制格式)。

"playready": {
  "pssh-base64": "AAAD4nBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA8LCAwAAAQABALgDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgB2ADgAMgByAHMARwBsADUATgAwAE8AdQBLADgAcgBPAEgAQQBLAHgAcABRAD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcAA6AC8ALwBwAHIALQBrAGUAeQBvAHMALgBsAGkAYwBlAG4AcwBlAGsAZQB5AHMAZQByAHYAZQByAC4AYwBvAG0ALwBjAG8AcgBlAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBWAGwAUgA3AEkAZABzAEkASgBFAHUAUgBkADAANgBMAGEAcQBzADIAagB3AD0APQA8AC8ARABTAF8ASQBEAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTACAAeABtAGwAbgBzAD0AIgAiAD4APABDAEkARAA+AHYAOAAyAHIAcwBHAGwANQBOADAATwB1AEsAOAByAE8ASABBAEsAeABwAFEAPQA9ADwALwBDAEkARAA+ADwARABSAE0AVABZAFAARQA+AHMAbQBvAG8AdABoADwALwBEAFIATQBUAFkAUABFAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEMASABFAEMASwBTAFUATQA+ADgARQBLAEQAcQBJAHgAUwAwAFEAWQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==",
  "pssh-hex": "000003e270737368000000009a04f07998404286ab92e65be0885f95000003c2c203000001000100b8033c00570052004d00480045004100440045005200200078006d006c006e0073003d00220068007400740070003a002f002f0073006300680065006d00610073002e006d006900630072006f0073006f00660074002e0063006f006d002f00440052004d002f0032003000300037002f00300033002f0050006c00610079005200650061006400790048006500610064006500720022002000760065007200730069006f006e003d00220034002e0030002e0030002e00300022003e003c0044004100540041003e003c00500052004f00540045004300540049004e0046004f003e003c004b00450059004c0045004e003e00310036003c002f004b00450059004c0045004e003e003c0041004c004700490044003e004100450053004300540052003c002f0041004c004700490044003e003c002f00500052004f00540045004300540049004e0046004f003e003c004b00490044003e007600380032007200730047006c0035004e0030004f0075004b00380072004f00480041004b007800700051003d003d003c002f004b00490044003e003c004c0041005f00550052004c003e0068007400740070003a002f002f00700072002d006b00650079006f0073002e006c006900630065006e00730065006b00650079007300650072007600650072002e0063006f006d002f0063006f00720065002f007200690067006800740073006d0061006e0061006700650072002e00610073006d0078003c002f004c0041005f00550052004c003e003c00440053005f00490044003e0056006c005200370049006400730049004a004500750052006400300036004c0061007100730032006a0077003d003d003c002f00440053005f00490044003e003c0043005500530054004f004d004100540054005200490042005500540045005300200078006d006c006e0073003d00220022003e003c004300490044003e007600380032007200730047006c0035004e0030004f0075004b00380072004f00480041004b007800700051003d003d003c002f004300490044003e003c00440052004d0054005900500045003e0073006d006f006f00740068003c002f00440052004d0054005900500045003e003c002f0043005500530054004f004d0041005400540052004900420055005400450053003e003c0043004800450043004b00530055004d003e00380045004b00440071004900780053003000510059003d003c002f0043004800450043004b00530055004d003e003c002f0044004100540041003e003c002f00570052004d004800450041004400450052003e00"
}

我在 list 中使用 mspr:pro 标记。 据我了解,使用 mspr:pro 时,您输入 PlayReady 对象而不是 PSSH-Box (对于在 list 中使用的 PSSH-BOX cenc:ppsh 标记)。

如何从 PSSH 构建 Playready 对象?

最佳答案

只需去掉 PSSH 框 header 即可。

PSSH 框语法:

aligned(8) class ProtectionSystemSpecificHeaderBox extends FullBox(‘pssh’, version, flags=0)
{ 
    unsigned int(8)[16] SystemID;
    if (version > 0)
    {
       unsigned int(32) KID_count;
       {
          unsigned int(8)[16] KID;
       } [KID_count]
    }
    unsigned int(32) DataSize; unsigned
    int(8)[DataSize] Data;
}

示例中的 PSSH 十六进制:

    // PSSH, big endian
    00 00 03 E2 70 73 73 68                         // box header, 994 bytes "pssh"
    00 00 00 00                                     // full box header, version 0, flags 0
    9A 04 F0 79 98 40 42 86 AB 92 E6 5B E0 88 5F 95 // PlayReady system ID
    00 00 03 C2                                     // data size, 962 bytes

    // PlayReady Object, little-endian
    C2 03 00 00                                     // object length, 962 bytes
    01 00                                           // record count, 1
    01 00                                           // record type, 1 - PRH
    B8 03                                           // record length, 952 bytes
    3C 00 57 00 52 [...]                            // record value, "<WRMHEADER xmlns=..."

您还可以使用以下方式在线解码:https://tools.axinom.com/decoders/PsshBox

引用:

关于http-live-streaming - 如何从 pssh 构建 PlayReady 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69458197/

相关文章:

python - HTTP实时音频流服务器

swift - 为什么AVPlayer先下载而不是直播?

android - DRM WideVine 视频无法从 Android Cast Sender 应用程序播放

ios - 如何在 iOS 中使用开发版本和发布版本处理框架?

iphone - iOS 是否支持 HTTP Live Streaming 之外的任何内容?

android - 在 Google-TV Sony 3.2 Android 程序中运行 HLS 流时如何停止(隐身)URL 抑制

android - 为视频应用程序选择 HLS 或 MPEG-DASH

ffmpeg - 如何通过 ffmpeg 生成多速率 mpeg-dash 流

html - 使用 MPEG DASH 流式传输纯音频 (.mp3) 文件

chromium - 为什么桌面版 Chrome 只支持 Widevine CDM 安全级别 L3?