2011-01-29 12 views
15

L'unico buon software che conosco che possa decelerare e accelerare la riproduzione di un video di YouTube in qualsiasi browser senza prima di scaricarlo (perché sarebbe ingombrante), è Enounce MySpeed.Come posso agganciare un video di Youtube (Flash Player?) Per rallentare la riproduzione?

Sfortunatamente, questo software non è gratuito e la mia versione di prova è scaduta. Stavo giocando intorno con le sue impostazioni di registro e ho notato un paio di tasti:

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 

In base ai nomi ei valori di queste chiavi di registro, sto cercando di indovinare il software MySpeed ​​Ganci qualche funzione (s) nei moduli elencati (ma i moduli sono o non sono gli stessi delle DLL? ..) e lo fa per ogni processo elencato in ProgramsToHook. Questo è quello che non capisco. Qual è il concetto del software MySpeed. Ovviamente sta prendendo in giro qualcosa, ma non ho molta familiarità con la complessità degli hook di Windows quindi sono venuto a chiederti degli esperti. Sto pensando se riesco a capire come funziona questo processo di hook, posso creare la mia versione del software usando EasyHook, che è una fantastica libreria .NET per eseguire hook in modalità utente e kernel.

Ho pensato che l'aggancio in modalità utente di Windows fosse qualcosa del genere. Scegli una funzione in una DLL e intercetti quella funzione (a.k.a hook) in un processo che vuoi. Se si desidera collegare la DLL in più processi, è sufficiente ripetere la procedura per ciascun processo.

E quindi l'aggancio in modalità kernel è semplicemente la scelta di una funzione in una DLL e l'intercettazione di tale funzione in ogni processo che la chiama (quindi in modalità kernel). Ma sicuramente ci sono un sacco di modi per agganciare; Non sono troppo sicuro su quale sia la differenza tra questi due ganci e l'iniezione DLL.

Quindi il punto è, mi piacerebbe sapere come funziona MySpeed. Qual è il loro concetto di aggancio? Se posso saperlo, allora posso creare un tale software in .NET!

Grazie in anticipo.

+2

+1 - Bella domanda; questo sarebbe ottimo per scopi di usabilità (seconda lingua, difficile da vedere/udito) e anche per l'apprendimento di parti di strumenti da video musicali. –

+0

Sì. Sorprendente come, oltre a MySpeed ​​di Enounce, non esista in realtà nessun altro software per rallentare o accelerare la riproduzione di video di YouTube. – Jason

risposta

3

Non riesco a fornire una spiegazione accurata in quanto non conosco le chiamate API o le capacità, ma si tratta di qualcosa di simile: L'app cerca iexplore.exe dove intercetta le chiamate a determinati moduli. Il modulo è principalmente flash player. Flash supporta la riproduzione del video più lentamente in modo da modificare la chiamata da iexplore.exe (pulsante di riproduzione JavaScript sulla pagina Web) o effettuare una chiamata aggiuntiva per impostare la velocità di riproduzione.

Quello che dovete fare:

  • Utilizzare questo strumento per controllare ciò che sta realmente accadendo: http://www.nektra.com/products/deviare-api-hook-windows/
  • Scopri come chiedere a Flash Player di rallentare un video (probabilmente nella documentazione API di Flash). Un approccio semplice potrebbe essere quello di vedere ciò che MySpeed ​​sta effettivamente facendo usando lo strumento di aggancio API Deviare.
  • Scrive un programma che replica questa procedura. Si tratta di intercettare i messaggi inviati da un handle (iexplore.exe) a un altro (flash .dll). Questo non può essere fatto esternamente, deve essere fatto internamente, quindi questo può essere di aiuto: http://www.codeproject.com/KB/threads/winspy.aspx

Su ganci: http://msdn.microsoft.com/en-gb/library/ms644960.aspx

Non credo che molte persone ha fatto questo in C#, quindi potrebbe offrire una sfida. Sarei interessato ai progressi (ostacoli) se hai un blog o qualcosa su cui condividere i dettagli cruenti.:)

MODIFICA: Il Deviare API Hook software sembra non solo per spiare le chiamate, ma consente anche di intercettarle. Quindi è un pacchetto all-in-one per le tue esigenze. :)
EDIT2: questione rilevante: How do I intercept messages being sent to a window?

+0

Grazie per Deviare, forse è un'alternativa interessante a EasyHook. Il secondo link è utile per un buon avvio in un nuovo mare di apprendimento. Apprezzo davvero il tuo sforzo nel rispondere a questa vecchia domanda, quindi la contrassegnerò come la risposta. – Jason

2

Youtube ha ora un lettore HTML5 con controlli di velocità di riproduzione.

Tutto ciò che dovete fare è abilitare html5 qui http://www.youtube.com/html5 Solo alcuni dei video supportano ancora il player html5.

Spero che questo aiuti.

2

La chiave per accelerare o rallentare un video è convincere i lettori multimediali che il tuo computer è più lento o più veloce di quello che è realmente. Questo può essere realizzato hooking timeGetTime().

Questo è estremamente un facile codice C# per realizzarlo:

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; 
     } 
    } 
} 

Ho appena pubblicato un articolo con un esempio di codice che mostra come fare questo con il motore di aggancio Deviare. Il codice di esempio funziona solo con la parte video (non audio) ed è disponibile here.

+0

Ho appena compilato il codice da github ma l'applicazione si blocca. Non sono riuscito a trovare il file manifest dal pacchetto deviare. Forse è questa la causa? – Mark

+0

Si prega di inviare il dettaglio del crash. Principalmente possono accadere due cose: è necessario scaricare la versione di deviar latsst poiché era molto aggiornata e anche il codice non funziona ora perché c'è stato qualche cambiamento nel flash o nel modo in cui YouTube sta funzionando. –

+0

L'arresto anomalo dell'applicazione all'avvio con il messaggio "Deviare test ha smesso di funzionare".Ho notato che la guida richiedeva un file chiamato file Devicom.x.manifest. Non riuscivo a trovarlo nella cartella DeviareV2 che credo sia l'ultima versione. – Mark

0

La chiave per accelerare o rallentare un video è quello di convincere i lettori multimediali che il computer è più lento o più veloce di quanto lo sia in realtà

manipolare l'ora di sistema sarà una cosa molto pericolosa e idiota da fare - non solo spezzerai i thread-thread in modalità utente e quindi avresti un impatto significativo sulle prestazioni del sistema, ma spezzerai anche molte funzionalità di logging e persino i riflettori in modalità utente che controllano i driver KM ... questo potrebbe danneggiare fisicamente (!) il tuo sistema perché l'hardware moderno è programmabile, dato l'insieme corretto (& proprietario) di func-calls e così via. Consiglio vivamente di NON riprodurlo, anche se alcune app AV lo intercetteranno a causa della sua natura pericolosa.

Ma siete un po 'fortunati: il kernel utilizza il proprio tempo, sincronizzato con l'hardware in modo che Windows stesso possa rimanere stabile per un periodo di tempo limitato.

Penso che dovresti tornare al tavolo da disegno, manipolare le strutture essenziali del tuo sistema operativo non è certamente il modo giusto per raggiungere il tuo obiettivo.

+1

Ha menzionato Enounce MySpeed ​​e l'hanno fatto, quindi nel contesto di quella domanda è una risposta adeguata. Sarai sorpreso di quante cose "idiote" vengano fatte dal software che gira su Windows per svolgere un determinato compito. Sono anche chiamati hack! –

+0

Sentiti libero di modificarlo –

+0

non possibile senza account e circa 999999999999 internet-pointZ – name

Problemi correlati