PDA

Ver la Versión Completa : Visualizar video con el codigo en un thread


carmelina
10-02-2009, 16:35:13
Hola a todos!
Tengo un problema con mi código y espero que alguien pueda ayudarme. La cosa es que intento visualizar un video con mi aplicacion y el código para ello lo tengo en un thread para poder hacer más cosas. La cosa es que si el código lo tengo en el Thread me dice que el fichero no exista aunque exista, mientras que si el mismo código lo tengo en el principal si puedo visualizar el video sin problemas.
El código de mi hilo es este. Si veis algo raro o que me falta algo que pudiese ayudarme os lo agradecería mucho.
unit HiloVisualizarvideo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, FileCtrl;
type
VisualizarVideo = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;

end;
implementation
uses Visualizacion, BusquedaBD;
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure HiloVisualizarVideo.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ HiloVisualizarVideo }

procedure VisualizarVideo.Execute;
var
nom : String;
IdUser : String;
path : String;
begin
{ Place thread code here }

MisvideosSeguridad.OpenDialog1.DefaultExt := 'avi';
MisvideosSeguridad.OpenDialog1.Filter := 'AVI files (*.avi)|*.avi';
nom:= SearchBD.Edit5.Text;
MisvideosSeguridad.nombreborrar:=nom;
SearchBD.Edit5.Clear;
IdUser:=MisvideosSeguridad.Edit9.Text;
MisvideosSeguridad.IdBorrar:=IdUser;
MisvideosSeguridad.OpenDialog1.FileName:= 'C:\Videos\'+IdUser+'\'+nom+'.avi';
path:='C:\Videos\'+IdUser+'\'+nom+'.avi';
if DirectoryExists(path) then
begin
MisvideosSeguridad.VLAVIPlayer1.FileName:=MisvideosSeguridad.OpenDialog1.FileName; //Seleccionamos el nombre del fichero a visualizar
MisvideosSeguridad.StatusBar1.SimpleText := 'Repoduciendo Archivo: ' + MisvideosSeguridad.OpenDialog1.FileName;
MisvideosSeguridad.VLAVIPlayer1.Enabled:=true;
end;
if not DirectoryExists(path) then
MisvideosSeguridad.Edit4.Text:=path;

end;
end.

Muchas gracias.
Un saludo.

cHackAll
11-02-2009, 21:10:18
No entiendo por que usas un hilo! acaso un TMediaPlayer o cualquier otro componente basado en MCI no crea internamente los hilos necesarios? Si es por causa del VLAVIPlayer usa otro componente que el AVI no necesita nada en "especial".

Saludos

carmelina
17-02-2009, 15:45:11
Hola!!
Pues tenías razón, el TVLAVIPlayer implementa ya un hilo para la visualización. Muchas gracias, porque es que no paro de darle vueltas a los threads y lo complico yo más:-)
De nuevo muchas gracias.
Por cierto a ver si alguien pudiese ayudarme con otro problemilla, la cosa es que tengo que grabar desde mi web cam, y entonces como cuando estaba grabando la aplicacion se quedaba solo grabando y no podía hacer nada más, he puesto el código de la grabación en un thread, pero se sigue quedando pillada y sólo graba, no me permite hacer nada mientras graba, cómo puedo solucionar esto? porque según yo entiendo la definición de thread, podría conseguir esto usando uno, pero no es así. Tal vez no estoy usando la llamada adecuada del thread, así que la adjunto por si alguien puede ayudarme.
procedure TMisvideosSeguridad.Grabar_captura();
var
p : GrabarCaptura;
begin
p:= GrabarCaptura.Create(True);
p.FreeOnTerminate := False;
p.Resume;

end;

GrabarCaptura es mi hilo, y en él, en el proceso execute tengo el código que hace que grabe la cámara.
Si alguien pudiese ayudarme o guiarme un poco sería genial.
Un saludo.