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); } }