读取init中的pssh和kid
This commit is contained in:
parent
0a47208a0c
commit
ddd3931f57
|
@ -0,0 +1,62 @@
|
|||
using N_m3u8DL_RE.Common.Util;
|
||||
|
||||
namespace Mp4SubtitleParser
|
||||
{
|
||||
public class MP4InitUtil
|
||||
{
|
||||
private static readonly byte[] SYSTEM_ID_WIDEVINE = { 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE, 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED };
|
||||
private static readonly byte[] SYSTEM_ID_PLAYREADY = { 0x9A, 0x04, 0xF0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95 };
|
||||
|
||||
public static string? ReadWVPssh(byte[] data)
|
||||
{
|
||||
string? pssh = null;
|
||||
//parse init
|
||||
new MP4Parser()
|
||||
.Box("moov", MP4Parser.Children)
|
||||
.FullBox("pssh", (box) =>
|
||||
{
|
||||
if (!(box.Version == 0 || box.Version == 1))
|
||||
throw new Exception("PSSH version can only be 0 or 1");
|
||||
var systemId = box.Reader.ReadBytes(16);
|
||||
if (SYSTEM_ID_WIDEVINE.SequenceEqual(systemId))
|
||||
{
|
||||
var dataSize = box.Reader.ReadUInt32();
|
||||
pssh = Convert.ToBase64String(box.Reader.ReadBytes((int)dataSize));
|
||||
}
|
||||
})
|
||||
.Parse(data);
|
||||
return pssh;
|
||||
}
|
||||
|
||||
public static string? ReadWVKid(byte[] data)
|
||||
{
|
||||
string? kid = null;
|
||||
//parse init
|
||||
new MP4Parser()
|
||||
.Box("moov", MP4Parser.Children)
|
||||
.Box("trak", MP4Parser.Children)
|
||||
.Box("mdia", MP4Parser.Children)
|
||||
.Box("minf", MP4Parser.Children)
|
||||
.Box("stbl", MP4Parser.Children)
|
||||
.FullBox("stsd", MP4Parser.SampleDescription)
|
||||
.FullBox("encv", MP4Parser.AllData((data) =>
|
||||
{
|
||||
kid = HexUtil.BytesToHex(data[^16..]).ToLower();
|
||||
}))
|
||||
.FullBox("enca", MP4Parser.AllData((data) =>
|
||||
{
|
||||
kid = HexUtil.BytesToHex(data[^16..]).ToLower();
|
||||
}))
|
||||
.FullBox("enct", MP4Parser.AllData((data) =>
|
||||
{
|
||||
kid = HexUtil.BytesToHex(data[^16..]).ToLower();
|
||||
}))
|
||||
.FullBox("encs", MP4Parser.AllData((data) =>
|
||||
{
|
||||
kid = HexUtil.BytesToHex(data[^16..]).ToLower();
|
||||
}))
|
||||
.Parse(data);
|
||||
return kid;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -74,6 +74,14 @@ namespace N_m3u8DL_RE.DownloadManager
|
|||
task.Increment(1);
|
||||
//修改输出后缀
|
||||
output = Path.ChangeExtension(output, ".mp4");
|
||||
if (result != null && result.Success)
|
||||
{
|
||||
var data = File.ReadAllBytes(result.ActualFilePath);
|
||||
var pssh = MP4InitUtil.ReadWVPssh(data);
|
||||
var kid = MP4InitUtil.ReadWVKid(data);
|
||||
if (pssh != null) Logger.WarnMarkUp($"[grey]PSSH(WV): {pssh}[/]");
|
||||
if (kid != null) Logger.WarnMarkUp($"[grey]KID: {kid}[/]");
|
||||
}
|
||||
}
|
||||
|
||||
//开始下载
|
||||
|
|
Loading…
Reference in New Issue