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片斷全體下載便可年夜功樂成。