优化实时解密判断条件
This commit is contained in:
parent
03c5ab3d74
commit
6e59dfd679
|
@ -291,7 +291,7 @@ namespace N_m3u8DL_RE.CommandLine
|
||||||
|
|
||||||
public static async Task<int> InvokeArgs(string[] args, Func<MyOption, Task> action)
|
public static async Task<int> InvokeArgs(string[] args, Func<MyOption, Task> action)
|
||||||
{
|
{
|
||||||
var rootCommand = new RootCommand("N_m3u8DL-RE (Beta version) 20220827")
|
var rootCommand = new RootCommand("N_m3u8DL-RE (Beta version) 20220830")
|
||||||
{
|
{
|
||||||
Input, TmpDir, SaveDir, SaveName, BaseUrl, ThreadCount, DownloadRetryCount, AutoSelect, SkipMerge, SkipDownload, CheckSegmentsCount,
|
Input, TmpDir, SaveDir, SaveName, BaseUrl, ThreadCount, DownloadRetryCount, AutoSelect, SkipMerge, SkipDownload, CheckSegmentsCount,
|
||||||
BinaryMerge, DelAfterDone, WriteMetaJson, AppendUrlParams, ConcurrentDownload, Headers, /**SavePattern,**/ SubOnly, SubtitleFormat, AutoSubtitleFix,
|
BinaryMerge, DelAfterDone, WriteMetaJson, AppendUrlParams, ConcurrentDownload, Headers, /**SavePattern,**/ SubOnly, SubtitleFormat, AutoSubtitleFix,
|
||||||
|
|
|
@ -175,7 +175,7 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
var path = Path.Combine(tmpDir, "_init.mp4.tmp");
|
var path = Path.Combine(tmpDir, "_init.mp4.tmp");
|
||||||
var result = await Downloader.DownloadSegmentAsync(streamSpec.Playlist.MediaInit, path, speedContainer, headers);
|
var result = await Downloader.DownloadSegmentAsync(streamSpec.Playlist.MediaInit, path, speedContainer, headers);
|
||||||
FileDic[streamSpec.Playlist.MediaInit] = result;
|
FileDic[streamSpec.Playlist.MediaInit] = result;
|
||||||
if (result == null)
|
if (result == null || !result.Success)
|
||||||
{
|
{
|
||||||
throw new Exception("Download init file failed!");
|
throw new Exception("Download init file failed!");
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
//从文件读取KEY
|
//从文件读取KEY
|
||||||
await SearchKeyAsync(currentKID);
|
await SearchKeyAsync(currentKID);
|
||||||
//实时解密
|
//实时解密
|
||||||
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && streamSpec.Playlist.MediaInit.EncryptInfo.Method == Common.Enum.EncryptMethod.CENC)
|
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && !string.IsNullOrEmpty(currentKID))
|
||||||
{
|
{
|
||||||
var enc = result.ActualFilePath;
|
var enc = result.ActualFilePath;
|
||||||
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
||||||
|
@ -225,9 +225,12 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
var path = Path.Combine(tmpDir, index.ToString(pad) + $".{streamSpec.Extension ?? "clip"}.tmp");
|
var path = Path.Combine(tmpDir, index.ToString(pad) + $".{streamSpec.Extension ?? "clip"}.tmp");
|
||||||
var result = await Downloader.DownloadSegmentAsync(seg, path, speedContainer, headers);
|
var result = await Downloader.DownloadSegmentAsync(seg, path, speedContainer, headers);
|
||||||
FileDic[seg] = result;
|
FileDic[seg] = result;
|
||||||
|
if (result == null || !result.Success)
|
||||||
|
{
|
||||||
|
throw new Exception("Download first segment failed!");
|
||||||
|
}
|
||||||
task.Increment(1);
|
task.Increment(1);
|
||||||
//实时解密
|
if (result != null && result.Success)
|
||||||
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && seg.EncryptInfo.Method == Common.Enum.EncryptMethod.CENC && result != null)
|
|
||||||
{
|
{
|
||||||
//读取init信息
|
//读取init信息
|
||||||
if (string.IsNullOrEmpty(currentKID))
|
if (string.IsNullOrEmpty(currentKID))
|
||||||
|
@ -236,21 +239,25 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
}
|
}
|
||||||
//从文件读取KEY
|
//从文件读取KEY
|
||||||
await SearchKeyAsync(currentKID);
|
await SearchKeyAsync(currentKID);
|
||||||
var enc = result.ActualFilePath;
|
//实时解密
|
||||||
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && !string.IsNullOrEmpty(currentKID))
|
||||||
var dResult = await MP4DecryptUtil.DecryptAsync(DownloaderConfig.MyOptions.UseShakaPackager, mp4decrypt, DownloaderConfig.MyOptions.Keys, enc, dec, currentKID, mp4InitFile);
|
|
||||||
if (dResult)
|
|
||||||
{
|
{
|
||||||
File.Delete(enc);
|
var enc = result.ActualFilePath;
|
||||||
result.ActualFilePath = dec;
|
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
||||||
|
var dResult = await MP4DecryptUtil.DecryptAsync(DownloaderConfig.MyOptions.UseShakaPackager, mp4decrypt, DownloaderConfig.MyOptions.Keys, enc, dec, currentKID, mp4InitFile);
|
||||||
|
if (dResult)
|
||||||
|
{
|
||||||
|
File.Delete(enc);
|
||||||
|
result.ActualFilePath = dec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//ffmpeg读取信息
|
||||||
|
Logger.WarnMarkUp(ResString.readingInfo);
|
||||||
|
mediaInfos = await MediainfoUtil.ReadInfoAsync(DownloaderConfig.MyOptions.FFmpegBinaryPath!, result!.ActualFilePath);
|
||||||
|
mediaInfos.ForEach(info => Logger.InfoMarkUp(info.ToStringMarkUp()));
|
||||||
|
ChangeSpecInfo(streamSpec, mediaInfos, ref useAACFilter);
|
||||||
|
readInfo = true;
|
||||||
}
|
}
|
||||||
//ffmpeg读取信息
|
|
||||||
Logger.WarnMarkUp(ResString.readingInfo);
|
|
||||||
mediaInfos = await MediainfoUtil.ReadInfoAsync(DownloaderConfig.MyOptions.FFmpegBinaryPath!, result!.ActualFilePath);
|
|
||||||
mediaInfos.ForEach(info => Logger.InfoMarkUp(info.ToStringMarkUp()));
|
|
||||||
ChangeSpecInfo(streamSpec, mediaInfos, ref useAACFilter);
|
|
||||||
readInfo = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//开始下载
|
//开始下载
|
||||||
|
@ -266,7 +273,7 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
FileDic[seg] = result;
|
FileDic[seg] = result;
|
||||||
task.Increment(1);
|
task.Increment(1);
|
||||||
//实时解密
|
//实时解密
|
||||||
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && seg.EncryptInfo.Method == Common.Enum.EncryptMethod.CENC && result != null)
|
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && result != null && result.Success && !string.IsNullOrEmpty(currentKID))
|
||||||
{
|
{
|
||||||
var enc = result.ActualFilePath;
|
var enc = result.ActualFilePath;
|
||||||
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
var dec = Path.Combine(Path.GetDirectoryName(enc)!, Path.GetFileNameWithoutExtension(enc) + "_dec" + Path.GetExtension(enc));
|
||||||
|
@ -293,7 +300,7 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
Logger.WarnMarkUp($"{Path.GetFileName(output)} => {Path.GetFileName(output = Path.ChangeExtension(output, $"copy" + Path.GetExtension(output)))}");
|
Logger.WarnMarkUp($"{Path.GetFileName(output)} => {Path.GetFileName(output = Path.ChangeExtension(output, $"copy" + Path.GetExtension(output)))}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && mp4InitFile != "")
|
if (DownloaderConfig.MyOptions.MP4RealTimeDecryption && DownloaderConfig.MyOptions.Keys != null && DownloaderConfig.MyOptions.Keys.Length > 0 && mp4InitFile != "")
|
||||||
{
|
{
|
||||||
File.Delete(mp4InitFile);
|
File.Delete(mp4InitFile);
|
||||||
//shaka实时解密不需要init文件用于合并
|
//shaka实时解密不需要init文件用于合并
|
||||||
|
@ -521,7 +528,7 @@ namespace N_m3u8DL_RE.DownloadManager
|
||||||
}
|
}
|
||||||
|
|
||||||
//重新读取init信息
|
//重新读取init信息
|
||||||
if (mergeSuccess && totalCount >= 1 && string.IsNullOrEmpty(currentKID) && streamSpec.Playlist!.MediaParts.First().MediaSegments.First().EncryptInfo.Method == Common.Enum.EncryptMethod.CENC)
|
if (mergeSuccess && totalCount >= 1 && string.IsNullOrEmpty(currentKID) && streamSpec.Playlist!.MediaParts.First().MediaSegments.First().EncryptInfo.Method != Common.Enum.EncryptMethod.NONE)
|
||||||
{
|
{
|
||||||
currentKID = ReadInit(output);
|
currentKID = ReadInit(output);
|
||||||
//从文件读取KEY
|
//从文件读取KEY
|
||||||
|
|
Loading…
Reference in New Issue