zoukankan      html  css  js  c++  java
  • <metro>PlayToReceiver

           PlayToReceiver例子演示了如何创建一个软件发挥接收机。

                                                     图1

          如图2所示,单击“start Receiver”键后,这程序就开始接收广告形式数据流。

        

                                                     图2

          如图3单击“stop Receiver”键后,这程序就停止接收。通过这样一个软件接收程序,可以以流媒体的形式,从不同电脑将资源转移到自己的电脑。就如同互联网上随时冒出的广告。这个程序只会接收不同计算机的音频/视频和图片。

         

        

                                                    图3

          它的工作原理是,当点击“start receiver”键时,就将startPlayToReceiver方法运行,随着开始初始化InitialisePlayToReceiver,接着把各种事件,通过多线程异步的手段来激活。最后是否执行某事件,由Dispatcher调度员以权能高低决定。在刚刚激活的事件中有接收器播放请求/暂停/停止/时间更新等各样请求异步事件。异步事件程序虽被激活,但要等待条件,即调度员依权值决定是否运行。

    receiver_PlayRequested
    receiver_PauseRequested
    receiver_StopRequested
    receiver_TimeUpdateRequested
    receiver_CurrentTimeChangeRequested
    receiver_SourceChangeRequested
    receiver_MuteChangeRequested
    receiver_PlaybackRateChangeRequested
    receiver_VolumeChangeRequested

          与此同时,它数字媒体接收器的各种音频视频各样方法会自行启动,等待接收。 一点击开始就立即运行的是数字媒体接收器的各种功能方法,例如音量变化/比率变化/媒体打开等。也可以由stopPlayToReceiver方法关闭。

    dmrVideo_VolumeChanged
    dmrVideo_RateChanged
    dmrVideo_MediaOpened
    dmrVideo_CurrentStateChanged
    dmrVideo_MediaEnded
    dmrVideo_MediaFailed
    dmrVideo_SeekCompleted
    dmrVideo_DownloadProgressChanged_1
    dmrImage_ImageFailed_1

          简单举例说明一下:激活startPlayToReceiver()方法后,它会唤醒里面的InitialisePlayToReceiver()方法,紧随会启动PlayRequested播放请求方法。

    InitialisePlayToReceiver();    =>
    receiver.PlayRequested += new TypedEventHandler<PlayToReceiver, object>
    (receiver_PlayRequested);   =>
     private async void receiver_PlayRequested(PlayToReceiver recv, Object args)
            {
                await Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
                {
                    if (dmrVideo != null && currentType == MediaType.AudioVideo)
                    {
                        IsPlayReceivedPreMediaLoaded = true;
                        dmrVideo.Play();
                    }
                    else if (currentType == MediaType.Image)
                    {
                        dmrImage.Source = imagerevd;
                        receiver.NotifyPlaying();
                    }
                });
            }

          同理,startPlayToReceiver()方法会给IsReceiverStarted的值赋为true。就唤醒数媒接收器的声音变化方法。

    IsReceiverStarted = true;       =>
    private void dmrVideo_VolumeChanged(object sender,RoutedEventArgs e)
     {
            if (IsReceiverStarted)
            {
                 receiver.NotifyVolumeChange(dmrVideo.Volume,dmrVideo.IsMuted);
             }
      }
  • 相关阅读:
    个人开发框架总结(六)
    使用Forms身份验证
    接口IStateManager的使用心得
    Remoting中向服务器传送新对象时应注意的问题
    具有反色文本的进度条绘制方法
    中文姓名的VbScript验证方法
    个人开发框架总结(七)
    Asp.net MVC 实例
    直接对List对象排序,提高系统性能
    Spring 简单实现邮件发送
  • 原文地址:https://www.cnblogs.com/virgil/p/2665529.html
Copyright © 2011-2022 走看看