Exemplo n.º 1
0
 /// <summary>
 /// 下载M3U8视频的头数据(Key 和 Map)(如果存在)
 /// </summary>
 /// <param name="head"></param>
 /// <param name="savedir"></param>
 public static bool DownloadM3U8Head(M3U8Head head, string savedir)
 {
     using (var client = new WebClient())
     {
         try
         {
             if (head.IsEncrypt)
             {
                 var kuri    = new Uri(head.KeyUrl);
                 var kfile   = kuri.LocalPath.Substring(kuri.LocalPath.LastIndexOf('/') + 1);
                 var keyfile = Path.Combine(savedir, kfile);
                 head.Key = client.DownloadData(head.KeyUrl);
                 File.WriteAllBytes(keyfile, head.Key);
                 head.KeyFile = keyfile;
             }
             if (head.HasMap)
             {
                 var mapurl   = new Uri(head.MapUrl);
                 var filename = mapurl.LocalPath.Substring(mapurl.LocalPath.LastIndexOf('/'));
                 var savefile = Path.Combine(savedir, filename);
                 client.DownloadFile(head.MapUrl, savefile);
                 head.MapFile = savefile;
             }
             return(true);
         }
         catch
         {
             return(false);
         }
     }
 }
Exemplo n.º 2
0
 public M3U8File(Uri url, M3U8Head head, ICollection <M3U8Segment> nodes)
 {
     RESOLUTION   = "";
     Head         = head;
     _nodes       = new List <M3U8Segment>(nodes);
     SourceUrl    = url;
     Name         = SourceUrl.LocalPath.Substring(SourceUrl.LocalPath.LastIndexOf('/') + 1);
     TotalSeconds = _nodes.Sum(p => p.Seconds);
     TotalTime    = TimeSpan.FromSeconds(TotalSeconds);
 }
Exemplo n.º 3
0
 public static M3U8Head AnalyzeM3U8Head(Uri urlfix, string content)
 {
     if (content.StartsWith("#EXTM3U"))
     {
         var head = new M3U8Head();
         var strs = content.Split('\n');
         foreach (var str in strs)
         {
             if (str.StartsWith("#EXTINF:"))
             {
                 break;
             }
             if (str.StartsWith("#EXT-X-VERSION:"))
             {
                 head.VERSION = str.Substring(15);
             }
             else if (str.StartsWith("#EXT-X-TARGETDURATION:"))
             {
                 var durstr = str.Substring(22);
                 if (double.TryParse(durstr, out var dr))
                 {
                     head.TARGETDURATION = dr;
                 }
             }
             else if (str.StartsWith("#EXT-X-MEDIA-SEQUENCE:"))
             {
                 var seqstr = str.Substring(22);
                 if (int.TryParse(seqstr, out var seq))
                 {
                     head.MEDIA_SEQUENCE = seq;
                 }
             }
             else if (str.StartsWith("#EXT-X-MAP:"))
             {
                 head.HasMap = true;
                 var strr = str.Substring(11);
                 var init = strr.Substring(4);//Trim URI=
                 var map  = init.Trim('\"');
                 if (map.Contains("://"))
                 {
                     head.MapUrl = map;
                 }
                 else if (map.StartsWith("/"))
                 {
                     head.MapUrl = urlfix.Scheme + "://" + urlfix.Authority + map;
                 }
                 else
                 {
                     head.MapUrl = urlfix + map;
                 }
             }
             else if (str.StartsWith("#EXT-X-KEY:"))
             {
                 var strr = str.Substring(11);
                 var kvs  = strr.Split(',');
                 foreach (var nvs in kvs)
                 {
                     var nv = nvs.Split('=');
                     if (nv[0] == "METHOD")
                     {
                         head.IsEncrypt     = true;
                         head.EncryptMethod = nv[1];
                     }
                     else if (nv[0] == "URI")
                     {
                         var k = nv[1].Trim('\"');
                         if (k.Contains(":"))
                         {
                             head.KeyUrl = k;
                         }
                         else if (k.StartsWith("/"))
                         {
                             head.KeyUrl = urlfix.Scheme + "://" + urlfix.Authority + k;
                         }
                         else
                         {
                             head.KeyUrl = urlfix + k;
                         }
                     }
                     else if (nv[0] == "IV")
                     {
                         head.IV = nv[1];
                     }
                 }
             }
         }
         return(head);
     }
     return(null);
 }