reproductor online formato descargar delphi winapi multimedia avi

delphi - formato - reproductor de video online sin descargar



Obteniendo la duración del archivo AVI (1)

Estoy usando la unidad VFW de JEDI wrapper en WinAPI.

El código que estoy escribiendo busca buscar unidades de usuario y detectar warez (nota: decidir si algún archivo es legal o no va más allá del alcance de esta pregunta). Hacemos MP3, WMA y alguna búsqueda de archivos gráficos. Ahora queremos detectar películas ilegales. Quiero abrir el archivo AVI, leer algunos detalles y cerrarlo. Tengo el siguiente código:

uses WFV; //from JEDI api wrappers procedure TForm1.Button1Click(Sender: TObject); var lInfo : TAVIFILEINFOW; lFile : IAVIFILE; lFileType : string; lLenMinutes : integer; lFPS : integer; begin {init file} AVIFileInit; try {Open file - note: since we search for warez this is perfely "warezy" file} AVIFileOpen(lFile, ''e:/Sideways KLAXXON/Sideways KLAXXON.avi'', OF_READ, nil); try {Get file info} AVIFileInfoW(lFile, lInfo, sizeof(lInfo)); lFPS:=Round(lInfo.dwRate /lInfo.dwScale); lLenMinutes := Round(lInfo.dwLength / lFPS / 60); lFileType := lInfo.szFileType; {just for show: prepare some memo to see what we get} memo1.Lines.Clear; memo1.Lines.Add(''File lenght [min]: '' + IntToStr(lLenMinutes)); memo1.Lines.Add(''Width: '' + IntToStr(lInfo.dwWidth)); memo1.Lines.Add(''Height: '' + IntToStr(lInfo.dwHeight)); memo1.Lines.Add(''File type: '' + lFileType); finally {Closing the file} AVIFileRelease (lFile); Pointer(lFile) := nil; end; finally {Releasing library} AVIFileExit; end; end;

Entonces lLenMinutes es algo equivalente a 98 mientras que la película dura aproximadamente 121 minutos. Esta es una gran diferencia. ¿Qué estoy haciendo mal? dwRate es 1 millón y dwScale es 40k, entonces el FPS es perfectamente 25. dwLength es 147k MSDN dice : "Las unidades están definidas por dwRate y dwScale".

Nota: este es un seguimiento de esta pregunta , pero como el problema se ha solucionado, cerré la otra pregunta y moví el contenido mejorado aquí.


MSDN dice que para el miembro AVIFILEINFO de AVIFILEINFO :

Cualquier secuencia puede definir su propia escala de tiempo para reemplazar la escala de tiempo del archivo.

¿Estás seguro de que las secuencias no anulan la velocidad y la escala proporcionadas en la estructura AVIFILEINFO ? la velocidad y la escala de una secuencia se almacenan en una estructura AVISTREAMINFO .