Ir para conteúdo
Fórum Script Brasil
  • 0

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


Rmpjunior

Pergunta

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 para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por Rmpjunior
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...