locked
Dúvida sobre C# (Windows Phone) RRS feed

  • Pergunta

  • Boa noite pessoal, entao é o seguinte: eu estou a fazer um trabalho em C#(windows phone) que consiste em fazer o download do conteudo de um ficheiro XML, que tem links para imagens, video e audio para depois os reproduzir, o XML tem tambem o playtime para cada um, que é o tempo que cada elemento vai passar(em milisegundos). Eu já faço o download do conteudo do XML e ja consigo reproduzir no emulador. o problema esta em reproduzir pelos tempos certos(o system.timers não funciona no wp), ou seja, esta a reproduzir mas sem ordem nenhuma. Penso que terei de usar um timer mas não sei como o fazer. Esta é a parte do código que uso para reproduzir o video:

     

    private void reproduzVideo(string name_file)
            {

               
                using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (isf.FileExists(name_file))
                    {
                        using (var isoStream = isf.OpenFile(name_file, FileMode.Open, FileAccess.Read))
                        {

                            mediaSound.SetSource(isoStream);
                           
                          
                           
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("xml_file.xml", FileMode.Open);

                    XElement xml = XElement.Load(isoFileStream);
                           
                            foreach (XElement node2 in xml.Element("graphics").Elements("file"))
                            {



                                string url_graficos = node2.Element("fileurl").Value;

                                string[] array = url_graficos.Split('/');
                                string[,] resultadosImage = { { node2.Element("fileurl").Value, node2.Element("playtime").Value, node2.Element("transition").Value } };

    //penso que aqui teria que colocar um timer que me fosse buscar o "playtime"..


                                mediaSound.Play();
                                mediaSound.Stop();


                            }}
                      
                        }}
                    else
                    {
                        //MessageBox.Show("The file does not exist");
                    }
                }

            }

    • Movido Levi Domingos sábado, 17 de dezembro de 2011 19:46 (De:C#)
    domingo, 11 de dezembro de 2011 03:50

Respostas

  • Olá knurx,

    Você realmente precisa tomar conta do tamanho da media?

    Se quer tocar até o final, pode simplesmente chamar o mediaSound.Play() e pronto.

    Caso deseje saber quando a meida acabou, use o evento: mediaSound.CurrentStateChanged. 

    Ex:

    mediaSound.Play();
    mediaSound.CurrentStateChanged += (CurrentStateChanged);
    


    E depois você controla no evento:

    private void CurrentStateChanged(object sender, System.Windows.RoutedEventArgs e) {
         switch (mediaSound.CurrentState) {
              case MediaElementState.Playing:
    		//começou a tocar
    		break;
    	  case MediaElementState.Stopped:
    		//acabou
    		break;
    	       //...
    	  }
         }
    

    Lembre-se que tudo isso vai ser assíncrono, então vai ter que mudar um pouco seu código.

    []'s!


    - André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
    • Sugerido como Resposta andrecarlucciMVP terça-feira, 10 de janeiro de 2012 13:13
    • Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:24
    terça-feira, 3 de janeiro de 2012 12:43

Todas as Respostas

  • Boa noite pessoal, entao é o seguinte: eu estou a fazer um trabalho em C#(windows phone) que consiste em fazer o download do conteudo de um ficheiro XML, que tem links para imagens, video e audio para depois os reproduzir, o XML tem tambem o playtime para cada um, que é o tempo que cada elemento vai passar(em milisegundos). Eu já faço o download do conteudo do XML e ja consigo reproduzir no emulador. o problema esta em reproduzir pelos tempos certos(o system.timers não funciona no wp), ou seja, esta a reproduzir mas sem ordem nenhuma. Penso que terei de usar um timer mas não sei como o fazer. Esta é a parte do código que uso para reproduzir o video:

     

    private void reproduzVideo(string name_file)
            {

               
                using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (isf.FileExists(name_file))
                    {
                        using (var isoStream = isf.OpenFile(name_file, FileMode.Open, FileAccess.Read))
                        {

                            mediaSound.SetSource(isoStream);
                           
                          
                           
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("xml_file.xml", FileMode.Open);

                    XElement xml = XElement.Load(isoFileStream);
                           
                            foreach (XElement node2 in xml.Element("graphics").Elements("file"))
                            {



                                string url_graficos = node2.Element("fileurl").Value;

                                string[] array = url_graficos.Split('/');
                                string[,] resultadosImage = { { node2.Element("fileurl").Value, node2.Element("playtime").Value, node2.Element("transition").Value } };

    //penso que aqui teria que colocar um timer que me fosse buscar o "playtime"..


                                mediaSound.Play();
                                mediaSound.Stop();


                            }}
                      
                        }}
                    else
                    {
                        //MessageBox.Show("The file does not exist");
                    }
                }

            }

    • Mesclado Levi Domingos domingo, 11 de dezembro de 2011 18:53 duplicado
    domingo, 11 de dezembro de 2011 04:13
  • Você quer implementar algo time um timer?

    Se for da uma olhada neste link
    http://www.developer.nokia.com/Community/Wiki/Implement_Timer_control_in_Windows_Phone 

     
    quinta-feira, 22 de dezembro de 2011 12:26
  • Olá knurx,

    Você realmente precisa tomar conta do tamanho da media?

    Se quer tocar até o final, pode simplesmente chamar o mediaSound.Play() e pronto.

    Caso deseje saber quando a meida acabou, use o evento: mediaSound.CurrentStateChanged. 

    Ex:

    mediaSound.Play();
    mediaSound.CurrentStateChanged += (CurrentStateChanged);
    


    E depois você controla no evento:

    private void CurrentStateChanged(object sender, System.Windows.RoutedEventArgs e) {
         switch (mediaSound.CurrentState) {
              case MediaElementState.Playing:
    		//começou a tocar
    		break;
    	  case MediaElementState.Stopped:
    		//acabou
    		break;
    	       //...
    	  }
         }
    

    Lembre-se que tudo isso vai ser assíncrono, então vai ter que mudar um pouco seu código.

    []'s!


    - André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
    • Sugerido como Resposta andrecarlucciMVP terça-feira, 10 de janeiro de 2012 13:13
    • Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:24
    terça-feira, 3 de janeiro de 2012 12:43