2011-01-29 22 views
15

El único buen software que conozco que puede desacelerar y acelerar la reproducción de un video de YouTube en cualquier navegador sin primero descargándolo (porque sería engorroso), es Enounce MySpeed.¿Cómo puedo enganchar un video de Youtube (¿Reproductor de Flash?) ¿Para ralentizar la reproducción?

Lamentablemente, este software no es gratuito, y mi versión de prueba se agotó. Yo estaba jugando con sus configuraciones de registro y se fijó en unas pocas teclas:

ProgramsToHook: iexplore.exe;firefox.exe;plugin-container.exe;chrome.exe;safari.exe;opera.exe;maxthon.exe;feeddemon.exe;realplay.exe;flvplayer.exe;flv player.exe;flock.exe;adobe media player.exe 
UseFlashAdapter: 1 
LLModules: ole32.dll;nspr4.dll;chrome.exe;realplay.exe;objb3201.dll;oleaut32.dll;rpflashplayer.dll 
ModulesToIntercept: flash10*;flash9*;npswf32.dll;gcswf32.dll;fldbg10*;flashplayer.3.1.1k.ocx;adobe media player.exe 

Sobre la base de los nombres y valores de estas claves del registro, supongo que el software MySpeed ​​ganchos alguna función (s) en los módulos mencionados (pero los módulos son o no son lo mismo que los DLL? ..) y lo hace para cada proceso enumerado en ProgramsToHook. Esto es lo que no entiendo. ¿Cuál es el concepto del software MySpeed? Obviamente está enganchando algo, pero no estoy muy familiarizado con las complejidades de los ganchos de Windows, así que vine a preguntarte expertos. Estoy pensando si puedo entender cómo funciona este proceso de enlace, puedo hacer mi propia versión del software usando EasyHook, que es una fantástica biblioteca .NET para realizar ganchos en modo usuario y en modo kernel.

Pensé que el modo de usuario de Windows es más o menos así. Usted elige una función en una DLL e intercepta esa función (a.k.a hook) en el proceso que desee. Si desea conectar la DLL en múltiples procesos, solo tiene que repetir el procedimiento para cada proceso.

Y, a continuación, el enrutamiento kernel-mode simplemente elige una función en una DLL e intercepta esa función en cada proceso que la llama (de ahí modo kernel). Pero seguramente hay toneladas de maneras de enganchar; No estoy muy seguro de cuál es la diferencia entre estos dos ganchos y la inyección de DLL tampoco.

El punto es que me gustaría saber cómo funciona MySpeed. ¿Cuál es su concepto de enganche? ¡Si puedo saber esto, entonces puedo hacer un software así en .NET!

Gracias de antemano.

+2

+1 - Buena pregunta; esto sería ideal para fines de usabilidad (segundo idioma, dificultad para ver/escuchar) y también para aprender partes de instrumentos de videos musicales. –

+0

Sí. Sorprendentemente, además de MySpeed ​​de Enounce, no existe ningún otro software para ralentizar o acelerar la reproducción de videos de YouTube. – Jason

Respuesta

3

No puedo proporcionarle una explicación precisa ya que desconozco las llamadas API o las capacidades, pero es algo así: Su aplicación busca iexplore.exe donde intercepta llamadas a ciertos módulos. El módulo es principalmente flash player. Flash tiene soporte para reproducir el video más lento, por lo que puede modificar la llamada de iexplore.exe (botón de reproducción de JavaScript en la página web) o realizar una llamada adicional para establecer la velocidad de reproducción.

Lo que hay que hacer:

  • Utilice esta herramienta para comprobar lo que está sucediendo realmente: http://www.nektra.com/products/deviare-api-hook-windows/
  • Aprende a pedir Flash Player para frenar un vídeo (probablemente en documentos de la API de Flash). Un enfoque simple podría ser ver qué está haciendo realmente MySpeed ​​con la herramienta de enlace API Deviare.
  • Escriba un programa que replique este procedimiento. Implica interceptar mensajes enviados desde un identificador (iexplore.exe) a otro (flash .dll). Esto no se puede hacer externamente, tiene que ser hecho internamente, por lo que este puede ser de ayuda: http://www.codeproject.com/KB/threads/winspy.aspx

En ganchos: http://msdn.microsoft.com/en-gb/library/ms644960.aspx

No creo que mucha gente ha hecho esto en C#, por lo que podría ofrecer un desafío. Sin embargo, me interesaría el progreso (obstáculos) si tienes un blog o algo para compartir los detalles sangrientos.:)

EDIT: El Deviare API Hook software parece no solo espiar las llamadas, sino también permitirle interceptarlas. Entonces, es un paquete todo en uno para sus necesidades. :)
Edit2: pregunta relevante: How do I intercept messages being sent to a window?

+0

Gracias por Deviare, tal vez es una alternativa interesante a EasyHook. El segundo enlace es útil para un buen comienzo en un nuevo mar de aprendizaje. Realmente aprecio tu esfuerzo al responder esta vieja pregunta, así que la marcaré como la respuesta. – Jason

2

Youtube ahora tiene un reproductor HTML5 que regula la velocidad de reproducción.

Todo lo que tienes que hacer es habilitar html5 aquí http://www.youtube.com/html5 Sin embargo, ahora solo algunos de los videos son compatibles con el reproductor html5.

Espero que esto ayude.

2

La clave para acelerar o ralentizar un video es convencer a los reproductores multimedia de que su computadora es más lenta o más rápida de lo que realmente es. Esto se puede lograr enganchando timeGetTime().

Ésta es una herramienta extremadamente fácil de código C# para lograrlo:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Nektra.Deviare2; 


namespace DeviareTest 
{ 
    public partial class Form1 : Form 
    { 
     private int nSpeed; 
     private uint nTime; 

     private NktSpyMgr _spyMgr; 

     public Form1() 
     { 
      InitializeComponent(); 

      _spyMgr = new NktSpyMgr(); 
      _spyMgr.Initialize(); 
      _spyMgr.OnFunctionCalled += new DNktSpyMgrEvents_OnFunctionCalledEventHandler(OnFunctionCalled); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      NktHook hook = _spyMgr.CreateHook("WINMM.dll!timeGetTime", (int)(eNktHookFlags.flgOnlyPostCall)); 
      hook.Hook(true); 

      bool bProcessFound = false; 
      NktProcessesEnum enumProcess = _spyMgr.Processes(); 
      NktProcess tempProcess = enumProcess.First(); 
      while (tempProcess != null) 
      { 
       if (tempProcess.Name.Equals("iexplore.exe", StringComparison.InvariantCultureIgnoreCase) && tempProcess.PlatformBits == 32) 
       { 
        hook.Attach(tempProcess, true); 
        bProcessFound = true; 
       } 
       tempProcess = enumProcess.Next(); 
      } 

      if(!bProcessFound) 
      { 
       MessageBox.Show("Please run \"iexplore.exe\" before!", "Error"); 
       Environment.Exit(0); 
      } 
     } 

     private void OnFunctionCalled(NktHook hook, NktProcess process, NktHookCallInfo hookCallInfo) 
     { 
      nTime++; 

      if (nSpeed==-2) 
       hookCallInfo.Result().LongVal = hookCallInfo.Result().LongVal - (int)(nTime * 0.2); 
      else if(nSpeed==2) 
       hookCallInfo.Result().LongVal = hookCallInfo.Result().LongVal + (int)(nTime * 3); 
     } 

     private void SlowButton_CheckedChanged(object sender, EventArgs e) 
     { 
      nSpeed = -2; 
     } 
     private void FastButton_CheckedChanged(object sender, EventArgs e) 
     { 
      nSpeed = 2; 
     } 
    } 
} 

Acabo de publicar un artículo con un ejemplo de código que muestra cómo hacer esto con el motor enganchando Deviare. El código de muestra solo funciona con la parte de video (no audio) y está disponible here.

+0

Acabo de compilar el código de github pero la aplicación falla. No pude encontrar el archivo manifiesto del paquete deviare. Tal vez esa es la causa? – Mark

+0

Por favor, envíe el detalle del bloqueo. Principalmente pueden suceder dos cosas: debe descargar la versión de latsst deviare ya que está muy actualizada y también el código no funciona ahora porque hubo algún cambio en flash o en la forma en que YouTube está funcionando. –

+0

El bloqueo de la aplicación al inicio con el mensaje "La prueba de Deviare ha dejado de funcionar".Noté que la guía requería un archivo llamado archivo Devicom.x.manifest. No pude encontrarlo en la carpeta DeviareV2, que creo que es la última versión. – Mark

0

La clave para acelerar o ralentizar un video es convencer a los reproductores multimedia que el equipo es más lento o más rápido de lo que realmente es

la manipulación de la hora del sistema será una cosa muy peligrosa e idiota a hacer: no solo romperá las líneas de comando en modo usuario y, por lo tanto, tendrá un impacto grave en el rendimiento del sistema, sino que también romperá muchas funcionalidades de registro e incluso reflectores de modo de usuario que controlan controladores de KM ... esto podría fallar y físicamente dañar (!) su sistema porque el hardware moderno es programable, dado el correcto (& propietario, por supuesto) conjunto de func-llamadas y tal. Recomiendo NO reproducir esto, incluso algunas aplicaciones AV interceptarán esto debido a su naturaleza peligrosa.

Pero tiene algo de suerte: el kernel usa su propio tiempo, sincronizado con el hardware para que las ventanas en sí PODRÍAN mantenerse estables durante un tiempo limitado.

Creo que deberías volver al diseño, manipulando las estructuras esenciales de tu sistema operativo sin duda no es la manera correcta de lograr tu objetivo.

+1

Mencionó Enounce MySpeed ​​y lo hicieron, por lo que en el contexto de esa pregunta es una respuesta adecuada. Se sorprenderá de cuántas cosas "idiotas" están haciendo el software que se ejecuta en Windows para realizar una determinada tarea. ¡Incluso se llaman hacks! –

+0

No dude en editarlo –

+0

no es posible sin cuenta y alrededor de 999999999999 punto de internetZ – name

Cuestiones relacionadas