技术经验解读:优酷真实视频地址解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 技术经验解读:优酷真实视频地址解析

优酷真实视频地址解析——2016年9月20日


没时间跟优酷肛啊,投奔youtube-dl了。项目地址为


如果另有用途,比如只想拿到真实地址而不下载,可参考以下C#代码:


public string【】 getRealUrlUsingYoutubeDL(string YoukuUrl)


{


string fileName = @"youtube-dl.exe";


Process p = new Process();


p.StartInfo.UseShellExecute = false;


p.StartInfo.RedirectStandardOutput = true;


p.StartInfo.FileName = fileName;


p.StartInfo.CreateNoWindow = true;


p.StartInfo.Arguments = string.Format(" --get-url --skip-download {0}", YoukuUrl);


p.Start();


p.WaitForExit(5000);//亲测,youtube-dl会因为不知道什么原因阻塞。。


string output = p.StandardOutput.ReadToEnd();


return output.Split('\n');//最后一个是"",自己处理吧


}


顺便一提,腾讯视频、乐视、爱奇艺、搜狐、新浪什么的都可以这么处理。


=================================================我是分割线,以下是2015年的解析方法=============================================


序:优酷之前更新了次算法(很久之前了,呵呵。。。),故此很多博客的解析算法已经无法使用。很多大牛也已经更新了新的解析方法。我也在此写篇解析过程的文章。(本文使用语言为C#)


由于优酷视频地址时间限制,在你访问本篇文章时,下面所属链接有可能已经失效,望见谅。


例:


1:获取视频vid


在视频url中标红部分。一个正则表达式即可获取。


1 string getVid(string url)


2 {


3 string strRegex = "(?<=id_)(\w+)";


4 Regex reg = new Regex(strRegex);


5 Match match = reg.Match(url);


6 return match.ToString();


7 }


2:获取视频元信息


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


  将前述vid嵌入到上面url中访问即可得到视频信息文件。由于视频信息过长不在此贴出全部内容。下面是部分重要内容的展示。(获取文件为json文件,可直接解析)


1 { "data": 【 {


2 "ip": 996949050,


3 "ep": "NQXRTAodIbrd1vnC8+JxB4emuRs41w7DWho=",


4 "segs": {


5 "hd2": 【


6 {


7 "no": "0",


8 "size": "34602810",


9 "seconds": 205,


10 "k": "248fe14b4c1b37302411f67a",


11 "k2": "1c8e113cecad924c5"


12 },


13 {


14 "no": "1",


15 },】 }, } 】,}


上面显示的内容后面都会使用到。其中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即为之前选择的segs。


3.1计算ep,sid,token


计算方法单纯的为数学计算,下面给出计算的函数。三个参数可一次性计算得到。其中涉及到Base64编码解码知识,点击查看。


1      private static string myEncoder(string a, byte【】 c, bool isToBase64)


2 {


3 string result = "";


4 List bytesR = new Listspan style="color: rgba(0, 0, 255, 1)">byte</span;


5 int f = 0, h = 0, q = 0;


6 int【】 b = new int【256】;


7 for (int i = 0; i < 256; i++)


8 b【i】 = i;


9 while (h < 256)


10 {


11 f = (f + b【h】 + a【h % a.Length】) % 256;


12 int temp = b【h】;


13 b【h】 = b【f】;


14 b【f】 = temp;


15 h++;


16 }


17 f = 0; h = 0; q = 0;


18 while (q [span style="color: rgba(0, 0, 0, 1)"> c.Length)


19 {


20 h = (h + 1) % 256;


21 f = (f + b【h】) % 256;


22 int temp = b【h】;


23 b【h】 = b【f】;


24 b【f】 = temp;


25 byte【】 bytes = new byte【】 { (byte)(c【q】 ^ b【(b【h】 + b【f】) % 256】) };


26 bytesR.Add(bytes【0】);


27 result += System.Text.ASCIIEncoding.ASCII.GetString(bytes);


28 q++;


29 }


30 if (isToBase64)


31 {


32 Byte【】 byteR = bytesR.ToArray();


33 result = Convert.ToBase64String(byteR);


34 }


35 return result;


36 }


37 public static void getEp(string vid, string ep, ref string pNew, ref string token, ref string sid)


38 {


39 string template1 = "becaf9be";


40 string template2 = "bf7e5f01";


41 byte【】 bytes = //代码效果参考:http://hnjlyzjd.com/hw/wz_24317.html

Convert.FromBase64String(ep);

42 ep = System.Text.ASCIIEncoding.ASCII.GetString(bytes);


43 string temp = myEncoder(template1, bytes, false);


44 string【】 part = temp.Split('');


45 sid = part【0】;


46 token = part【1】;


47 string whole = string.Format("{0}{1}_{2}", sid, vid, token);


48 byte【】 newbytes = System.Text.ASCIIEncoding.ASCII.GetBytes(whole);


49 epNew = myEncoder(template2, newbytes, true);


50 }


计算得到ep,token,sid分别为cCaVGE6OUc8H4ircjj8bMiuwdH8KXJZ0vESH/7YbAMZuNaHQmjbTwg==, 3825, 241273717793612e7b085。注意,此时ep并不能直接拼接到url中,需要对此做一下url编码ToUrlEncode(ep)。最终ep为cCaVGE6OUc8H4ircjj8bMiuwdH8KXJZ0vESH%2f7YbAMZuNaHQmjbTwg%3d%3d


3.2视频格式及清晰度


视频格式和选择的segs有密切关系。如本文选择的hd2,格式即为flv,下面是segs,视频格式和清晰度的对照。之前对此部分理解有些偏差,多谢削着苹果走路提醒。


“segs”,”视频格式”,”清晰度”


"hd3", "flv", "1080P"


"hd2", "flv", "超清"


"mp4", "mp4", "高清"


"flvhd", "flv", "高清"


"flv", "flv", "标清"


"3gphd", "3gp", "高清"


3.3拼接地址


  最后的m3u8地址为


4:获取视频地址


将上述m3u8文件下载后,其中内容即为真实地址,不过还需要稍微处理一下。部分内容如下:


1 #EXTM3U


2 #EXT-X-TARGETDURATION:12


3 #EXT-X-VERSION:3


4 #EXTINF:6.006,


5


6 #EXTINF:5.464,


7


8 #EXTINF:5.505,


9


10 #EXTINF:9.26,


11


12 #EXTINF:11.136,


13


14 #EXTINF:8.258,


15


16 #EXTINF:9.843,


17


18 #EXTINF:10.26,


19


相关文章
|
9天前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
46 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
12天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
192 69
|
3天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
5天前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
13 1
|
10天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
31 6
|
8天前
|
传感器 机器学习/深度学习 自动驾驶
未来出行的革新:无人驾驶技术深度解析
在当今科技飞速发展的时代,无人驾驶技术正逐步从科幻走向现实,成为未来交通领域最具革命性的变化之一。本文旨在深入探讨无人驾驶技术的工作原理、关键技术组件以及面临的伦理与法律挑战,并展望其对社会经济和日常生活的深远影响。通过分析感知、决策和执行三个核心环节,本文揭示了无人驾驶汽车如何利用先进的传感器阵列、复杂的算法和精密的机械控制来实现自主行驶。同时,文章也讨论了数据安全、隐私保护及责任归属等问题,呼吁建立相应的法规框架以促进技术的健康发展。最后,无人驾驶技术被预测将为减少交通事故、缓解拥堵、提高能效及推动共享经济等方面带来显著益处,预示着一个更加智能、高效和可持续的出行未来。
|
4天前
|
Cloud Native 持续交付 Docker
深入解析Docker容器化技术及其在生产环境中的应用
深入解析Docker容器化技术及其在生产环境中的应用
9 0
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
56 6
|
19天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理

推荐镜像

更多
下一篇
无影云桌面