none
Problema com visualização de mídias no componente do Media Player RRS feed

  • Pergunta

  • Olá a todos e uma boa tarde.

    Estou com um problema que nao consigo resolver em um aplicativo que estou desenvolvendo.

    Tenho uma thread que faz verificações a um xml a cada periodo de tempo. Nesse xml existem o nome de alguns arquivos que devem ser tocados no media player por um certo periodo de tempo, e depois que esse arquivo é tocado, outro arquivo começa ser mostrado.

    Cada arquivo deve ser exibido por uma certa quantia de tempo. Por exemplo: Primeiro, exiba o arquivo foto1.jpg por 10 segundos, depois exiba os 30 primeiros segundos de filme.wmv, e assim por diante.

    Para fazer o arquivo ser tocado no tempo que eu quero, eu uso Thread.Sleep. Depois que o tempo do Sleep passa, a verificação por arquivos que devem ser tocados começa de novo e sobrescreve o arquivo que está sendo tocado atualmente.

    O problema é que quando quero exibir qualquer arquivo, ele é mostrado por 5 segundos e então a tela fica preta até dar o tempo de execução que era esperado e então passa para o próximo arquivo. Por exemplo: Era para mostrar a imagem.jpg por 30 segundos, mas o que acontece é que a imagem é mostrada por 5 segundos e depois some, então a tela fica preta por 25 segundos e o próximo arquivo é mostrado. Isso acontece com todos os arquivos.

    Segue o trecho de código que dá o play nos arquivos:

    Private Sub TocarMidias()
            Dim agenda As XDocument
            Dim dataInicialEvento As New DateTime
            Dim dataFinalEvento As New DateTime
            Dim diferencaSegundos As Integer
            Dim segundosARetirar As Integer
            Dim duracaoMidia As Integer
            Dim stringDuracaoMidia As String()
            Dim formatos As New System.Collections.Specialized.StringCollection
    
            ' uma lista com os formatos de mídia que o windows media player consegue reproduzir
            formatos.Add("wmv")
            formatos.Add("avi")
            formatos.Add("mp4")
            formatos.Add("jpg")
            formatos.Add("png")
            formatos.Add("gif")
    
            Do
                If (IsNothing(xmlAgenda) = False) Then
                    agenda = xmlAgenda
    
                    For Each evento As XElement In agenda.Element("requisicao").Elements("evento")
                        Try
                            dataInicialEvento = CDate(evento.Element("dataInicial").Value)
                            dataFinalEvento = CDate(evento.Element("dataFinal").Value)
                        Catch e As Exception
                            MsgBox("Erro ao verificar a data do evento: " + vbCrLf + e.Message)
                            Exit For
                        End Try
    
                        If (dataInicialEvento <= DateTime.Now And dataFinalEvento >= DateTime.Now) Then
                            For Each sequencia As XElement In evento.Elements("sequencia")
                                For Each midia As XElement In sequencia.Elements("midia")
                                    If (File.Exists(config("pastaArquivosLocais") + midia.Element("nomeOriginal").Value) = True) Then
                                        If (formatos.Contains(midia.Element("extensaoArquivo").Value)) Then
    
                                            stringDuracaoMidia = midia.Element("duracao").Value.Split(":")
                                            duracaoMidia = CInt(stringDuracaoMidia(0) * 60 * 60) + CInt(stringDuracaoMidia(1) * 60) + CInt(stringDuracaoMidia(2))
    
                                            ' calculo para parar o vídeo no fim da campanha
                                            diferencaSegundos = DateDiff("s", DateTime.Now, dataFinalEvento)
    
                                            If (diferencaSegundos > 0) Then
                                                If (diferencaSegundos > duracaoMidia) Then
                                                    segundosARetirar = 0
                                                Else
                                                    segundosARetirar = duracaoMidia - segundosARetirar
                                                End If
                                            End If
    
                                            If (diferencaSegundos > 0) Then
                                                MsgBox("vou dar play na mídia por " + CStr((duracaoMidia) - (segundosARetirar)) + " segundos")
                                                AxWindowsMediaPlayer1.URL = config("pastaArquivosLocais") + midia.Element("nomeOriginal").Value
                                                Thread.Sleep((duracaoMidia * 1000) - (segundosARetirar * 1000))
                                            Else
                                                MsgBox("deu pau nessa porra")
                                                Exit For
                                            End If
                                        Else
                                            MsgBox("Não quero tocar arquivos com o formato " + midia.Element("extensaoArquivo").Value)
                                        End If
                                    Else
                                        MsgBox("O arquivo " + config("pastaArquivosLocais") + midia.Element("nomeOriginal").Value + " não existe")
                                    End If
                                Next
                            Next
                        End If
                    Next
                End If
            Loop
        End Sub

    Ja virei, remexi, testei, mas não achei o problema, que ainda persiste.

    Espero que possam me ajudar.

    Grato desde já.

    sábado, 15 de dezembro de 2012 22:21

Respostas