PyDownTV2
PyDownTV2 copied to clipboard
Solución a Telemadrid
Ciertos videos como este http://www.telemadrid.es/?q=programas/madrilenos-por-el-mundo/madrilenos-por-el-mundo-londres-2012, y en general los de estos programas (Objetivo, Dossier...) no están disponibles.
La llamada PlayerMediaFacade.findMediaById amf, u otras por el estilo, devuelven sin embargo varios links mp4 que no funcionan. La solución completa a estos casos es la siguiente:
1- se recogen los links de la petición amf tal cual, por ejemplo 5 (renditions), de tipo
http://telemadridhdhd-f.akamaihd.net/hd/104403117001/104403117001_1750717340001_a1f2ded7-a580-4dd7-88ef-922f441b35ce.mp4.
Estos enlaces akamai son los que no van.
2- se obvia el Publisher_ID (104403117001) y la última parte y nos quedamos con los 13 dígitos intermedios: 1750717340001, y hacemos esto con todas las renditions. Cada uno de estos enlaces corresponde a una calidad según bitrate. La estructura de estas secuencias intermedias es la siguiente: los primeros 5 dígitos y los tres últimos son constantes, variando los 5 intermedios. Recogemos todo esto. Según el ejemplo de madrileños por el mundo, estos códigos intermedios serían:
1750723075001 1750712067001 1750718087001 1750714452001 1750717340001
- Rompemos los códigos según la estrategia:
el primero p.ej. 17507-17340-001, y nos quedamos con los 5 dígitos de en medio para cada caso, es decir,
23075,12067,18087,14452,17340
Añadimos los 5 primeros y los 3 últimos
17507,23075,12067,18087,14452,17340,001
4- Construimos un nuevo enlace con esa secuencia:
http://telemadridhdhd-f.akamaihd.net/hd/104403117001/104403117001_17507,23075,12067,18087,14452,17340,001_a1f2ded7-a580-4dd7-88ef-922f441b35ce.mp4
5- añadimos al final las opciones (necesario)
".csmil/bitrate=4?v=3.1.0&fp=WIN%2011,8,800,94&r=$g="
quedando
http://telemadridhdhd-f.akamaihd.net/hd/104403117001/104403117001_17507,23075,12067,18087,14452,17340,001_a1f2ded7-a580-4dd7-88ef-922f441b35ce.mp4.csmil/bitrate=4?v=3.1.0&fp=WIN%2011,8,800,94&r=&g=
Pues bien, este enlace descarga un flv, que varía según lo que indiquemos en bitrate={0..renditions-1}. Del amf (yo uso por ejemplo amfgateway), sacamos los bitrates, size, height, etc...El orden bitrate es el orden en el que están los archivos en el amf.
Si aabilio quiere, puede probar con esto.
Los datos r y g son típicos de Akamai, pero al parecer aquí sin valor, son dos códigos de 5 y 12 letras mayúsculas aleatorias.
Se puede probar con
function gr($n) { for ($s = '', $i = 0, $z = strlen($a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')-1; $i != $n; $x = rand(0,$z), $s .= $a{$x}, $i++); return $s; }
$r=gr(5) y $g=gr(12). Parece que corresponde a HdLiveRandomString.
*GetHdLiveRandomString(int _count) { String text = ""; Random rnd = new Random(DateTime.Now.Millisecond); for (int i = 0; i < _count; i++) { text = text + char.ConvertFromUtf32(rnd.Next(65, 89));//capital chars } return text; }