VB .NET - Embutindo e executando arquivos de vídeos - III


 Neste artigo vou mostrar como embutir e executar arquivos de vídeos como um recurso usando a linguagem VB .NET. Hoje vamos criar uma playlist de vídeos não embutidos para execução e mostrar como podemos acessar vídeos remotos.

Na segunda parte do artigo mostrei como criar uma playlist para executar os vídeos embutidos e neste artigo vou mostrar a opção de distribuir os vídeos não embutidos mas em uma pasta do projeto. Assim os vídeos terão que ser acessados pelo programa para serem executados.

A opção de embutir os vídeos em Resourcers Files trouxe como vantagem apenas a forma de distribuição e o acesso mais facilitado; de resto so temos desvantagens, que na minha opinião desencoraja essa prática. A opção de embutir arquivos em Resources Files somente deve ser usada para arquivos pequenos como arquivos de imagens que podem ser usados por todo o projeto.

Então vou mostrar a abordagem onde distribuímos a aplicação com os arquivos de vídeos em uma pasta do projeto.

Para isso eu vou criar uma pasta chamada Videos no projeto e nesta pasta copiar os 5 arquivos de vídeos usados pela aplicação.

Para criar a pasta Videos no menu Project clique em New Folder

A seguir clique sobre a pasta criada e escolha a opção Add Existing Item e selecione os arquivos

A seguir temos que criar uma playlist acessando os arquivos de vídeos e incluindo cada arquivo na playlist.

Para isto obtemos o caminho do diretório base da aplicação usando a linha de código:

Dim caminhoBase As String = AppDomain.CurrentDomain.BaseDirectory

Depois basta substituir o \bin\Debug pelo nome da pasta onde estão os vídeos para obter o caminho completo dos vídeos.

Dim caminhoVideos As String = caminhoBase.Replace("\bin\Debug\", "\Videos\")

A seguir criamos um array de strings e obtemos todos os arquivos com extensão .mp4 desta pasta :

Dim videos As String() = Directory.GetFiles(caminhoVideos, "*.mp4")

Agora percorremos o array contendo os vídeos e incluímos cada vídeo na playlist :

For Each video As String In videos
     playlist.appendItem(wmp1.newMedia(video))
Next

E executamos a playlist :

wmp1.currentPlaylist = playlist
wmp1.Ctlcontrols.play()

Pronto. Bem simples não é mesmo ???

Recursos Usados:

Executando uma playlist de vídeos a partir de uma pasta do projeto

Abra o projeto criado no VS 2017 Community do artigo anterior e altere o código do evento Click do botão Assistir Vídeo conforme abaixo:

Private Sub btnAssistir_Click(sender As Object, e As EventArgs) Handles btnAssistir.Click
        wmp1.stretchToFit = True
        btnTelaCheia.Enabled = True
        playlist = wmp1.playlistCollection.newPlaylist("Playlist")
        Dim caminhoBase As String = AppDomain.CurrentDomain.BaseDirectory
        Dim caminhoVideos As String = caminhoBase.Replace("\bin\Debug\", "\Videos\")
        Try
            Dim videos As String() = Directory.GetFiles(caminhoVideos, "*.mp4")
            If videos.Length = 0 Then
                MessageBox.Show("Não existem arquivos")
                Return
            End If
            For Each video As String In videos
                playlist.appendItem(wmp1.newMedia(video))
            Next
            wmp1.currentPlaylist = playlist
            wmp1.Ctlcontrols.play()
        Catch ex As Exception
            MessageBox.Show("Erro ao acessar os arquivos. Verifique a pasta e/ou os arquivos")
        End Try
    End Sub

Esse código vai obter os arquivos *.mp4 da pasta Videos, incluir cada vídeo na playlist e executar todos os vídeos incluídos na playlist de forma sequencial.

Inclui um tratamento de erros básico para tratar a exceção de caminho inválido de vídeo e quando a lista de vídeo estiver vazia.

Abaixo segue o código do botão de comando Encerrar:

Private Sub btnEncerrar_Click(sender As Object, e As EventArgs) Handles btnEncerrar.Click
        
If (MessageBox.Show("Deseja encerrar a aplicação ?", "Encerrar", MessageBoxButtons.YesNo) = DialogResult.Yes) Then
            If wmp1.playState = WMPLib.WMPPlayState.wmppsStopped Then
                Me.Close()
            ElseIf wmp1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
                wmp1.Ctlcontrols.stop()
                Me.Close()
            Else
                Me.Close()
            End If
End If

End Sub

O restante continua igual e ao executar o projeto e clicar em assistir vídeo cada vídeo será executado sequencialmente.

Acessando arquivos remotos

Podemos executar arquivos de vídeo remotamente ?

Claro que sim, e, é bem simples fazer isso. O código abaixo define uma url de origem e o nome do vídeo a ser executado:

  Dim url As String = "http://www.macoratti.net/Video/"
  wmp1.URL = url & "Andromeda.mp4"
  wmp1.Ctlcontrols.play()

Basta usar a propriedade URL e definir o caminho completo do vídeo e a seguir executar.

O código do nosso botão ficaria assim:

Private Sub btnAssistir_Click(sender As Object, e As EventArgs) Handles btnAssistir.Click
        wmp1.stretchToFit = True
        btnTelaCheia.Enabled = True       
        Try           

           Dim url As String = "http://www.macoratti.net/Video/"
           wmp1.URL = url & "Andromeda.mp4"
           wmp1.Ctlcontrols.play()

        Catch ex As Exception
            MessageBox.Show("Erro ao acessar os arquivos. Verifique a pasta e/ou os arquivos")
        End Try
    End Sub

Neste exemplo e estou executando um vídeo específico.

Acessando arquivos do youtube usando média player e flash player

Bem, se podemos acessar arquivos remotos, podemos acessar e executar arquivos do Youtube, certo !

Não, não é tão simples assim.

Vamos tentar acessar uma url de um vídeo do Youtube:

Dim video As String = "https://www.youtube.com/watch?v=udAL48P5NJU".Replace("/watch?v=", "/v/")
wmp1.URL = video
wmp1.Ctlcontrols.play()

Ao executar o projeto usando este código iremos obter o seguinte resultado:

Então, usando o código acima, vemos que existe uma restrição atual feita pelo Youtube que não permite mais embutir vídeos no media player ou no flash player cujo código é mostrado a seguir:

Dim video As String = "https://www.youtube.com/watch?v=udAL48P5NJU".Replace("/watch?v=", "/v/")
AxShockwaveFlash1.Movie = video

Naturalmente podemos continuar a incrementar a aplicação com outros recursos mas nosso objetivo esta cumprido. Fique a vontade para adicionar novos recursos.

Pegue o projeto completo aqui :   VBnet_Video_3.zip (sem os vídeos)

"Disse-lhes, pois, Jesus: Quando levantardes o Filho do homem, então conhecereis que EU SOU, e que nada faço por mim mesmo; mas isto falo como meu Pai me ensinou."
João 8:28

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no Visual Studio ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET ?

 

Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti