程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成的優酷真實視頻地址解析功效(2014新算法)

C#完成的優酷真實視頻地址解析功效(2014新算法)

編輯:C#入門知識

C#完成的優酷真實視頻地址解析功效(2014新算法)。本站提示廣大學習愛好者:(C#完成的優酷真實視頻地址解析功效(2014新算法))文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成的優酷真實視頻地址解析功效(2014新算法)正文


序:優酷之前更新了次算法(良久之前了,呵呵。。。),故此許多博客的解析算法曾經沒法應用。許多年夜牛也曾經更新了新的解析辦法。我也在此寫篇解析進程的文章。(本文應用說話為C#)

因為優酷視頻地址時光限制,在你拜訪本篇文章時,上面所屬鏈接有能夠曾經掉效,瞥見諒。

例:http://v.youku.com/v_show/id_XNzk2NTI0MzMy.html

1:獲得視頻vid

在視頻url中標紅部門。一個正則表達式便可獲得。


string getVid(string url)
{
    string strRegex = "(?<=id_)(\\w+)";
    Regex reg = new Regex(strRegex);
    Match match = reg.Match(url);
    return match.ToString();
}

2:獲得視頻元信息

  http://v.youku.com/player/getPlayList/VideoIDS/XNzk2NTI0MzMy/Pf/4/ctype/12/ev/1

  將前述vid嵌入到下面url中拜訪便可獲得視頻信息文件。因為視頻信息太長不在此貼出全體內容。上面是部門主要內容的展現。(獲得文件為json文件,可直接解析)


{ "data": [ {
            "ip": 1991941296,
            "ep": "MwXRTAsbJLnb0PbJ8uJxAdSivUU11wnKXxc=",
            "segs": {
                "hd2": [
                    {
                        "no": "0",
                        "size": "34602810",
                        "seconds": 205,
                        "k": "248fe14b4c1b37302411f67a",
                        "k2": "1c8e113cecad924c5"
                    },
                    {
                        "no": "1",
                    },] }, } ],}

下面顯示的內容前面都邑應用到。個中segs包括hd3,hd2,flv,mp4,3gp等各類格局,而且每種格局下均分為若干段。本次選用清楚度較高的hd2(視頻格局為flv)

3:拼接m3u8地址

http://pl.youku.com/playlist/m3u8?ctype=12&ep={0}&ev=1&keyframe=1&oip={1}&sid={2}&token={3}&type={4}&vid={5}

以上共有6個參數,個中vid和oip曾經獲得,分離之前的vid和json文件中的ip字段,即(XNzk2NTI0MzMy和1991941296),然則ep,sid,token須要從新盤算(json文件中的ep值不克不及直接應用)。type比擬簡略,前面會說。

3.1盤算ep,sid,token

盤算辦法純真的為數學盤算,上面給出盤算的函數。三個參數可一次性盤算獲得。個中觸及到Base64編碼解碼常識,點擊檢查。


private static string myEncoder(string a, byte[] c, bool isToBase64)
        {
            string result = "";
            List<Byte> bytesR = new List<byte>();
            int f = 0, h = 0, q = 0;
            int[] b = new int[256];
            for (int i = 0; i < 256; i++)
                    b[i] = i;
            while (h < 256)
            {
                f = (f + b[h] + a[h % a.Length]) % 256;
                int temp = b[h];
                b[h] = b[f];
                b[f] = temp;
                h++;
            }
            f = 0; h = 0; q = 0;
            while (q < c.Length)
            {
                h = (h + 1) % 256;
                f = (f + b[h]) % 256;
                int temp = b[h];
                b[h] = b[f];
                b[f] = temp;
                byte[] bytes = new byte[] { (byte)(c[q] ^ b[(b[h] + b[f]) % 256]) };
                bytesR.Add(bytes[0]);
                result += System.Text.ASCIIEncoding.ASCII.GetString(bytes);
                q++;
            }
            if (isToBase64)
            {
                Byte[] byteR = bytesR.ToArray();
                result = Convert.ToBase64String(byteR);
            }
            return result;
        }
        public static void getEp(string vid, string ep, ref string pNew, ref string token, ref string sid)
        {
            string template1 = "becaf9be";
            string template2 = "bf7e5f01";
            byte[] bytes = Convert.FromBase64String(ep);
            ep = ystem.Text.ASCIIEncoding.ASCII.GetString(bytes);
            string temp = myEncoder(template1, bytes, false);
            string[] part = temp.Split('_');
            sid = part[0];
            token = part[1];
            string whole = string.Format("{0}_{1}_{2}", sid, vid, token);
            byte[] newbytes = System.Text.ASCIIEncoding.ASCII.GetBytes(whole);
            epNew = myEncoder(template2, newbytes, true);
        }

盤算獲得ep,token,sid分離為diaVGE+IVMwB5CXXjz8bNHi0cCEHXJZ0vESH/7YbAMZuNaHQnT/Wzw==, 4178, 441265221168712cdf4f8。留意,此時ep其實不能直接拼接到url中,須要對此做一下url編碼ToUrlEncode(ep)。終究ep為diaVGE%2bIVMwB5CXXjz8bNHi0cCEHXJZ0vESH%2f7YbAMZuNaHQnT%2fWzw%3d%3d

3.2盤算type

Type值和選擇的segs有親密關系。如本文選擇的hd2,type即為flv,上面是segs,type和清楚度的對比。


“segs”,”type”,”清楚度”
"hd3", "flv", "1080P"
"hd2", "flv", "超清"
"mp4", "mp4", "高清"
"flvhd", "flv", "高清"
"flv", "flv", "標清"
"3gphd", "3gp", "高清"

3.3拼接地址

最初的m3u8地址為

http://pl.youku.com/playlist/m3u8?ctype=12&ep=diaVGE%2bIVMwB5CXXjz8bNHi0cCEHXJZ0vESH%2f7YbAMZuNaHQnT%2fWzw%3d%3d&ev=1&keyframe=1&oip=1991941296&sid=441265221168712cdf4f8&token=4178&type=flv&vid=XNzk2NTI0MzMy

4:獲得視頻地址

將上述m3u8文件下載後,個中內容即為真實地址,不外還須要略微處置一下。部門內容以下:

#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-VERSION:3
#EXTINF:6,
http://59.108.137.14/696CD107FE4D821FFBF173EB3/03000208005430B01849631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv?ts_start=0&ts_end=5.9&ts_seg_no=0&ts_keyframe=1
#EXTINF:5.533,
http://59.108.137.14/696CD107FE4D821FFBF173EB3/03000208005430B01849631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv?ts_start=5.9&ts_end=11.433&ts_seg_no=1&ts_keyframe=1
#EXTINF:5.467,
http://59.108.137.14/696CD107FE4D821FFBF173EB3/03000208005430B01849631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv?ts_start=11.433&ts_end=16.9&ts_seg_no=2&ts_keyframe=1
#EXTINF:9.267,

個中每條url只包括6s閣下視頻,然則可將url中參數部門去失落便可獲得現實的長度。然則每條去失落後需歸並一下雷同的url,如上述列表可獲得url片斷

http://59.108.137.14/696CD107FE4D821FFBF173EB3/03000208005430B01849631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv

將m3u8中一切的url片斷全體下載便可年夜功樂成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved