Exemple #1
0
        //Source Resolver Callback

        private CarenResult CallbackCreateMediaSource_OnInvoke(ICarenMFAsyncResult Param_AsyncResult)
        {
            //Variavel que vai ser retornada.
            CarenResult Resultado = ResultCode.SS_OK;

            //Variaveis utilizadas.
            CA_MF_OBJECT_TYPE OutTypeObject = CA_MF_OBJECT_TYPE.MF_OBJECT_INVALID;

            //Conclui a operação assincrona.
            Resultado = myMediaSession.ResolvedorMidia.EndCreateObjectFromURL(Param_AsyncResult, out OutTypeObject, myMediaSession.SourceMidia = new CarenMFMediaSource());

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar concluir a operação assincrona de criação da mídia!", true);

                //Sai do método.
                goto Done;
            }

            //Cria o Presentation Source.
            Resultado = myMediaSession.SourceMidia.CreatePresentationDescriptor(out myMediaSession.DescritorMidia);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha criar o descritor de apresetação para a mídia carregada!", true);

                //Sai do método.
                goto Done;
            }

            //Obtém a quantidade de stream no media source.
            Resultado = myMediaSession.DescritorMidia.GetStreamDescriptorCount(out myMediaSession.TotalStreamMediaSource);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao obter a quantidade de fluxos na mídia carregada!", true);

                //Sai do método.
                goto Done;
            }

            //Chama o método para criar e configurar a topologia
            ConfigurarTopologia();

            //Define a topologia na Sessao da mídia.
            Resultado = myMediaSession.MediaSession.SetTopology(CA_MFSESSION_SETTOPOLOGY_FLAGS.Zero, myMediaSession.Topologia);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao definir a topologia na sessao de mídia!", true);

                //Sai do método.
                goto Done;
            }

            //Obtém o tempo total da mídia.
            myMediaSession.TotalTimeMidiaNs       = ObterTempoTotalMidia();
            myMediaSession.TotalTimeMidiaSegundos = myMediaSession.TotalTimeMidiaNs / REFTIME_1_SEGUNDO;

            Done :;
            //Retorna o resultado.
            return(Resultado);
        }
Exemple #2
0
        //Media Session Callback

        private CarenResult CallbackMediaSession_OnInvoke(ICarenMFAsyncResult Param_AsyncResult)
        {
            //Variavel que vai ser retornada.
            CarenResult Resultado = ResultCode.SS_OK;

            //Variaveis utilizadas.
            ICarenMFMediaEvent OutEvent     = null;
            CA_MediaEventType  OutEventType = CA_MediaEventType.MEUnknown;

            //Obtém o evento gerado.
            Resultado = myMediaSession.MediaSession.EndGetEvent(Param_AsyncResult, out OutEvent);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar obter o evento da media session!", true);

                //Sai do método.
                goto Done;
            }

            //Obtém o tipo do evento.
            Resultado = OutEvent.GetType(out OutEventType);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar obter o tipo do evento da media session!", true);

                //Sai do método.
                goto Done;
            }

            //Chama o método para processar o evento
            ProcessarEventoMediaSession(OutEventType, ref OutEvent);

            //Verifica se a media session não foi fechada antes de requisitar o proximo evento.
            if (StatusPlayback != StatusRendering.Closed)
            {
                //Chama o proximo evento na lista.
                Resultado = myMediaSession.MediaSession.BeginGetEvent(myMediaSession.CallbackMediaSession, null);

                //Verifica se não houve erro
                if (Resultado.StatusCode != ResultCode.SS_OK)
                {
                    //Falhou ao realizar a operação.

                    //Chama uma mensagem de erro.
                    ShowMensagem("Ocorreu uma falha ao tentar solicitar o proximo evento assincrona da Media Session!", true);

                    //Sai do método.
                    goto Done;
                }
            }

            Done :;
            //Libera o ponteiro para o evento.
            SafeReleaseInterface(OutEvent);

            //Retorna o resultado.
            return(Resultado);
        }