Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Enviar/Receber comandos de um vídeo do youtube


Rmpjunior

Question

Fala Galera,

Estou com uma dúvida que está tirando meu sono. É o seguinte:

Quero desenvolver um programa que abra vídeos do youtube, até ai tudo certo, consegui abri-los com o componente do package da ActiveX TShockwaveFlash. O grande problema é que eu quero fazer uma lista de vídeos, e que assim que acabe um vídeo, comece outro da lista.Já fiquei horas procurando e nada.

Outra possível solução, é a abrir o vídeo no TWebBrowser, se existir algum evento que aconteça no fim da reprodução do vídeo, seria uma boa.

Encontrei uma forma de tirar as informações do vídeo, apenas acessar o site:

http://gdata.youtube.com/feeds/api/videos/"id do vídeo"

Exemplo:

http://gdata.youtube...eos/wpq96oiK5uY

Que aparecem as informações, dá pra tirar o nome do vídeo e a duração do mesmo em segundos. No entanto, como "contar" este tempo de reprodução?

Acho que não seria a solução mais inteligente.

O componente tem a função "GetVariable", que eu acredito seja a chave do problema, esta função pega o valor de um parâmetro do vídeo, o problema é encontrar o nome deste parâmetro..

Desde já obrigado.

Link to comment
Share on other sites

Recommended Posts

  • 0

veja que te passei um codigo usado para tocar mp3 ( usar um listbox para guardar os endereços dos videos nesse caso)

com o componente TVideoGrabber voce pode tocar os videos de uma lista, em sequencia, alem de muitas outras facilidades que o componente possui

zoom, contador de tempo, controles de contraste, brilho, cor, tirar um instantaneo do video .. etc

abraço

Link to comment
Share on other sites

  • 0

esse componente abre videos da internet

TVideoGrabber main features:

# AVI / MPEG / WMV recording

# Recording with Pre-Roll,

# Timer Recording (delayed start, stop timered or create new file at regular intervals)

# plays the most video clips: WMV, AVI, ASF, MPG, MP4, MOV

# plays most audio clip: WAV, MP3

# Inclusion of a particular window identified by name or handle

# Video files or streaming video URLs (authentication supported)

# Zoom within the areas of the video source

tem tutorial para uso dos componentes

http://www.findsoft.net/Free_tvideograbber-tutorial/

abraço

Link to comment
Share on other sites

  • 0

Antes de tudo quero agradecer a compreensão e a tentativa de ajudar Jhonas, mas o grande problema não é em executar os vídeos, eu até consegui fazer isso de duas maneiras, pelo TShockwaveFlash e pelo TWebBrowser. O problema é fazer uma lista de reprodução que "funcione sozinha", ao final de um vídeo, imediatamente comece o próximo da lista. O problema também não é em fazer a lista nem nada, somente saber quando o vídeo está sendo executado, ou está parado.

Talvez eu não tenha sido claro no primeiro post, acho que agora deu pra mostrar bem o que eu quero.

Link to comment
Share on other sites

  • 0

Fiz um teste usando o componente FlashViewer ... com ele voce consegue fazer o que esta querendo

tem um demo nesse link e os componentes para baixar

http://www.delphiflash.com/download/demo/youtube/youtube.zip

componente FlashViewer

http://www.delphiflash.com/flash-viewer-engine

OBS: para que voce execute um video após outro em sequencia, no memo do demo, aparece o valor do tamanho do video ... basta fazer uma comparação com tempo total com o tempo restante do video para poder executar o proximo

voce disse que consegue obter a informação de tempo em segundos do video... passa pra mim essa rotina que eu tento ver se da pra fazer com o webbrowser

abraço

Link to comment
Share on other sites

  • 0

esse link não esta funcionando

http://gdata.youtube.com/feeds/api/videos/%22id

com relação ao componente TFlashViewer, ele tem as propriedades

FlashViewer.TotalFrames;
FlashViewer.CurrentFrame;

que poderiam ser usados para controlar o tempo do video, mas na versão trial que peguei não funciona

a jogada seria então obter esses valores do texto da URL, fazer comparação dos valores para testar o fim do video, e depois utilizar a simulação de clique do mouse no proximo video para executa-lo automaticamente.

abraço

Link to comment
Share on other sites

  • 0

conseguiu usar o TFlashViewer ?

ok.. entendi como usar o id para pegar o arquivo xml e obter o valor em segundos do video, mas não seria nada pratico usar dessa maneira

Fazendo uma adaptação desse exemplo

http://www.webcheats.com.br/forum/delphi-v...do-youtube.html

mais esse, voce consegue cadastrar uma lista de videos depois reproduzi-los em seguencia

http://www.delphiflash.com/download/demo/youtube/youtube.zip

voce vai precisar dos valores &len= ( seria o valor em segundos do video ) e do valor &et= ( tempo dado no decorrer do video ) que esta no texto da URL do video

abraço

Link to comment
Share on other sites

  • 0

Beleza, consegui coloca-lo aqui, acho que esse é o caminho mesmo, estou com um problema fácil agora:

Como pegar a função &et? porque ela muda de lugar na url, tentei usar uma function pra pegar ela entre duas substrings, mas a cada vez que muda a URL ela muda de posição.

E outra, esse tempo de mudança da URL é aleatório ou tem como controlar?

Link to comment
Share on other sites

  • 0
Como pegar a função &et? porque ela muda de lugar na url, tentei usar uma function pra pegar ela entre duas substrings, mas a cada vez que muda a URL ela muda de posição.
faça assim:

if pos('&len=',MemoURLs.Lines.Text )>0 then
       Edit2.Text := trim(copy(MemoURLs.Lines.Text,pos('&len=',MemoURLs.Lines.Text),10));

    if pos('&et=',MemoURLs.Lines.Text )>0 then
       Edit1.Text := trim(copy(MemoURLs.Lines.Text,pos('&et=',MemoURLs.Lines.Text),10));

E outra, esse tempo de mudança da URL é aleatório ou tem como controlar?

esse tempo é aleatório dependendo de onde voce clica com o mouse na barra de progresso do video, mas o valor final do &et sempre será o valor final de &len ou muito proximo ( nos decimos de segundo ).

veja o que consegue fazer

abraço

Link to comment
Share on other sites

  • 0

vai não, voce vai ver mudar assim no edit

&et=0.0112

&et=1.0233

&et=12.149

&et=70.745

&et=120.06

quando a parte inteira de &et=70.745 for igual a parte inteira de &len=70.800 então chegou no fim do video

o valor de &len= não vai ficar mudando

o que vai te interessar é a parte inteira do numero

voce vai ter que extrair a parte numerica da string ( somente o valor será usado para calculo )

abraço

Link to comment
Share on other sites

  • 0

Estou com dificuldade pra pegar a parte inteira.

Estava tentando isso:

Edit1.Text:=Copy(Edit1.Text,0,Length(Edit1.Text)-Pos('.',Edit1.Text));

mas não está dando certo..

Depois de conseguir a parte inteira, acho que uma aproximação de 4 segundos fica sussa :D

Edited by Rmpjunior
Link to comment
Share on other sites

  • 0

Estou com dificuldade pra pegar a parte inteira.

veja esse exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var s : string; num : integer;
begin
   s:= '&et=12.149';
   Edit2.Text:=Copy(s,pos('=',s)+1,pos('.',s)-1);
end;
o conteudo do Edit2.Text será = '12.149' entretanto voce deve observar que o ponto decimal é um caracter, o que pode ser comprovado por isso
procedure TForm1.Button1Click(Sender: TObject);
var s : string; num : integer;
begin
   s:= '&et=12.149';
   Edit2.Text:=floattostr(trunc(strtofloat(Copy(s,pos('=',s)+1,pos('.',s)-1))));
end;
Dica: obtido o valor em caracter '12.149' voce deve transformar o ponto decimal em virgula, para transformar de caracter para valor real, para depois retirar a parte inteira do numero usando a função trunc do delphi ========================================================================= caso não tenha conseguido, essa seria uma das maneiras de fazer isso:
procedure TForm1.Button1Click(Sender: TObject);
var s : string; num : integer;
begin
   s:= '&et=12.149';
   s:= StringReplace(s,'.',',',[rfReplaceAll]);
   s:= Copy(s,pos('=',s)+1,10);
   num := trunc(strtofloat(s));
   Edit2.Text:= inttostr(num);
end;
outra forma de fazer isso
procedure TForm1.Button1Click(Sender: TObject);
var s : string; num : integer;
begin
   s:= '&et=12.149';
   Edit2.Text:=floattostr(trunc(strtofloat(StringReplace(Copy(s,pos('=',s)+1,pos('.',s)-1),'.',',',[rfReplaceAll]))));
end;

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...