PlayToReceiver 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示“播放到”目标。
public ref class PlayToReceiver sealed
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class PlayToReceiver final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class PlayToReceiver final
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class PlayToReceiver
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class PlayToReceiver
function PlayToReceiver()
Public NotInheritable Class PlayToReceiver
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
应用功能 |
privateNetworkClientServer
|
注解
可以使用 PlayToReceiver 类创建自定义软件“播放到”接收器,该接收器是网络上的计算机的数字媒体呈现器。 你可以在应用中包括 PlayToReceiver 对象来处理与“播放到”客户端计算机的通信,然后使用自己的媒体元素或控件播放或显示从这些计算机流式传输的内容。
PlayToReceiver 类的成员包括以下内容:
- FriendlyName 属性,用于标识在网络上播发播放到接收方的名称。
- 用于标识“播放到”接收器支持的媒体类型的属性: SupportsAudio、 SupportsVideo、 SupportsImage。
- StartAsync 方法,用于启动“播放到”接收器,并将其作为数字媒体呈现器在网络上播发。 StopAsync 方法,该方法停止播放到接收器,并停止在网络上播发它。
- 从计算机接收媒体流时发生的 SourceChangeRequested 事件, 以及当“播放到”客户端计算机请求操作(例如音量更改)或流式媒体的播放位置更改时发生的事件: CurrentTimeChangeRequested、 MuteChangeRequested、 PauseRequested、 PlayRequested、 StopRequested、 VolumeChangeRequested、 TimeUpdateRequested。
- 可以调用的方法,以便在“播放到”接收方发生更改时通知“播放到”客户端: NotifyDurationChange、 NotifyEnded、 NotifyError、 NotifyLoadedMetadata、 NotifyPaused、 NotifyPlaying、 NotifyRateChange、 NotifySeeked、 NotifySeeking、 NotifyStopped、 NotifyTimeUpdate、 NotifyVolumeChange。
在“播放到”中,视频从当前位置开始。 如果要从头开始启动视频,只需在建立“播放到”连接后立即查找视频的开头。
有关创建软件“播放到”接收器的示例,请参阅 媒体强制转换。
Windows.Media.PlayTo.PlayToReceiver receiver;
Windows.System.Display.DisplayRequest display;
Windows.UI.Core.CoreDispatcher dispatcher;
bool seeking = false;
private async void StartReceiverButton_Click(object sender, RoutedEventArgs e)
{
try
{
dispatcher = Window.Current.CoreWindow.Dispatcher;
if (receiver == null)
{
receiver = new Windows.Media.PlayTo.PlayToReceiver();
}
// Add Play To Receiver events and properties
receiver.CurrentTimeChangeRequested += receiver_CurrentTimeChangeRequested;
receiver.MuteChangeRequested += receiver_MuteChangeRequested;
receiver.PauseRequested += receiver_PauseRequested;
receiver.PlaybackRateChangeRequested += receiver_PlaybackRateChangeRequested;
receiver.PlayRequested += receiver_PlayRequested;
receiver.SourceChangeRequested += receiver_SourceChangeRequested;
receiver.StopRequested += receiver_StopRequested;
receiver.TimeUpdateRequested += receiver_TimeUpdateRequested;
receiver.VolumeChangeRequested += receiver_VolumeChangeRequested;
receiver.FriendlyName = "Sample Play To Receiver";
receiver.SupportsAudio = false;
receiver.SupportsVideo = true;
receiver.SupportsImage = false;
// Add MediaElement events
VideoPlayer.CurrentStateChanged += VideoPlayer_CurrentStateChanged;
VideoPlayer.MediaEnded += VideoPlayer_MediaEnded;
VideoPlayer.MediaFailed += VideoPlayer_MediaFailed;
VideoPlayer.MediaOpened += VideoPlayer_MediaOpened;
VideoPlayer.RateChanged += VideoPlayer_RateChanged;
VideoPlayer.SeekCompleted += VideoPlayer_SeekCompleted;
VideoPlayer.VolumeChanged += VideoPlayer_VolumeChanged;
// Advertise the receiver on the local network and start receiving commands
await receiver.StartAsync();
// Prevent the screen from locking
if (display == null)
display = new Windows.System.Display.DisplayRequest();
display.RequestActive();
StatusTextBlock.Text = "'" + receiver.FriendlyName + "' started.";
}
catch
{
receiver = null;
StatusTextBlock.Text = "Failed to start receiver.";
}
}
private async void StopReceiverButton_Click(object sender, RoutedEventArgs e)
{
try
{
if (receiver != null)
{
await receiver.StopAsync();
if (display != null)
display.RequestRelease();
// Remove Play To Receiver events
receiver.CurrentTimeChangeRequested -= receiver_CurrentTimeChangeRequested;
receiver.MuteChangeRequested -= receiver_MuteChangeRequested;
receiver.PauseRequested -= receiver_PauseRequested;
receiver.PlaybackRateChangeRequested -= receiver_PlaybackRateChangeRequested;
receiver.PlayRequested -= receiver_PlayRequested;
receiver.SourceChangeRequested -= receiver_SourceChangeRequested;
receiver.StopRequested -= receiver_StopRequested;
receiver.TimeUpdateRequested -= receiver_TimeUpdateRequested;
receiver.VolumeChangeRequested -= receiver_VolumeChangeRequested;
// Remove MediaElement events
VideoPlayer.Pause();
VideoPlayer.CurrentStateChanged -= VideoPlayer_CurrentStateChanged;
VideoPlayer.MediaEnded -= VideoPlayer_MediaEnded;
VideoPlayer.MediaFailed -= VideoPlayer_MediaFailed;
VideoPlayer.MediaOpened -= VideoPlayer_MediaOpened;
VideoPlayer.RateChanged -= VideoPlayer_RateChanged;
VideoPlayer.SeekCompleted -= VideoPlayer_SeekCompleted;
VideoPlayer.VolumeChanged -= VideoPlayer_VolumeChanged;
StatusTextBlock.Text = "Stopped '" + receiver.FriendlyName + "'.";
}
}
catch
{
StatusTextBlock.Text = "Failed to stop '" + receiver.FriendlyName + "'.";
}
}
Private receiver As Windows.Media.PlayTo.PlayToReceiver
Private display As Windows.System.Display.DisplayRequest
Private seeking As Boolean = False
Private Async Sub StartReceiverButton_Click()
Try
If receiver Is Nothing Then
receiver = New Windows.Media.PlayTo.PlayToReceiver()
End If
' Add Play To Receiver events and properties
AddHandler receiver.CurrentTimeChangeRequested, AddressOf receiver_CurrentTimeChangeRequested
AddHandler receiver.MuteChangeRequested, AddressOf receiver_MuteChangeRequested
AddHandler receiver.PauseRequested, AddressOf receiver_PauseRequested
AddHandler receiver.PlaybackRateChangeRequested, AddressOf receiver_PlaybackRateChangeRequested
AddHandler receiver.PlayRequested, AddressOf receiver_PlayRequested
AddHandler receiver.SourceChangeRequested, AddressOf receiver_SourceChangeRequested
AddHandler receiver.StopRequested, AddressOf receiver_StopRequested
AddHandler receiver.TimeUpdateRequested, AddressOf receiver_TimeUpdateRequested
AddHandler receiver.VolumeChangeRequested, AddressOf receiver_VolumeChangeRequested
receiver.FriendlyName = "Sample Play To Receiver"
receiver.SupportsAudio = False
receiver.SupportsVideo = True
receiver.SupportsImage = False
' Add MediaElement events
AddHandler VideoPlayer.CurrentStateChanged, AddressOf VideoPlayer_CurrentStateChanged
AddHandler VideoPlayer.MediaEnded, AddressOf VideoPlayer_MediaEnded
AddHandler VideoPlayer.MediaFailed, AddressOf VideoPlayer_MediaFailed
AddHandler VideoPlayer.MediaOpened, AddressOf VideoPlayer_MediaOpened
AddHandler VideoPlayer.RateChanged, AddressOf VideoPlayer_RateChanged
AddHandler VideoPlayer.SeekCompleted, AddressOf VideoPlayer_SeekCompleted
AddHandler VideoPlayer.VolumeChanged, AddressOf VideoPlayer_VolumeChanged
' Advertise the receiver on the local network and start receiving commands
Await receiver.StartAsync()
' Prevent the screen from locking
If display Is Nothing Then
display = New Windows.System.Display.DisplayRequest()
display.RequestActive()
StatusTextBlock.Text = "'" & receiver.FriendlyName & "' started."
End If
Catch
receiver = Nothing
StatusTextBlock.Text = "Failed to start receiver. "
End Try
End Sub
Private Async Sub StopReceiverButton_Click()
Try
If receiver IsNot Nothing Then
Await receiver.StopAsync()
If display IsNot Nothing Then display.RequestRelease()
' Remove Play To Receiver events
RemoveHandler receiver.CurrentTimeChangeRequested, AddressOf receiver_CurrentTimeChangeRequested
RemoveHandler receiver.MuteChangeRequested, AddressOf receiver_MuteChangeRequested
RemoveHandler receiver.PauseRequested, AddressOf receiver_PauseRequested
RemoveHandler receiver.PlaybackRateChangeRequested, AddressOf receiver_PlaybackRateChangeRequested
RemoveHandler receiver.PlayRequested, AddressOf receiver_PlayRequested
RemoveHandler receiver.SourceChangeRequested, AddressOf receiver_SourceChangeRequested
RemoveHandler receiver.StopRequested, AddressOf receiver_StopRequested
RemoveHandler receiver.TimeUpdateRequested, AddressOf receiver_TimeUpdateRequested
RemoveHandler receiver.VolumeChangeRequested, AddressOf receiver_VolumeChangeRequested
' Remove MediaElement events
VideoPlayer.Pause()
RemoveHandler VideoPlayer.CurrentStateChanged, AddressOf VideoPlayer_CurrentStateChanged
RemoveHandler VideoPlayer.MediaEnded, AddressOf VideoPlayer_MediaEnded
RemoveHandler VideoPlayer.MediaFailed, AddressOf VideoPlayer_MediaFailed
RemoveHandler VideoPlayer.MediaOpened, AddressOf VideoPlayer_MediaOpened
RemoveHandler VideoPlayer.RateChanged, AddressOf VideoPlayer_RateChanged
RemoveHandler VideoPlayer.SeekCompleted, AddressOf VideoPlayer_SeekCompleted
RemoveHandler VideoPlayer.VolumeChanged, AddressOf VideoPlayer_VolumeChanged
StatusTextBlock.Text = "Stopped '" & receiver.FriendlyName & "'."
End If
Catch
StatusTextBlock.Text = "Failed to stop '" & receiver.FriendlyName & "'."
End Try
End Sub
只要在“播放到”接收器上播放视频或音乐或图像持续发送到“播放到”接收器,PlayTo 应用就不会暂停。 应用在显示当前图像后有大约 10 秒的时间发送新图像,在当前图像结束后大约 10 秒发送下一个音频或视频。
注意
此类不敏捷,这意味着需要考虑其线程模型和封送处理行为。 有关详细信息,请参阅线程和封送处理 (C++/CX) 和使用多线程环境中的Windows 运行时对象 (.NET) 。
构造函数
PlayToReceiver() |
创建“播放到”接收器的新实例。 |
属性
FriendlyName |
获取或设置“播放到”目标的显示名称。 |
Properties |
获取“播放到”接收器的一组自定义属性。 |
SupportsAudio |
获取或设置一个值,该值指示“播放到”目标是否支持音频。 |
SupportsImage |
获取或设置一个值,该值指示“播放到”目标是否支持图像。 |
SupportsVideo |
获取或设置一个值,该值指示“播放到”目标是否支持视频。 |
方法
NotifyDurationChange(TimeSpan) |
通知“播放到”接收器音频或视频播放的持续时间已更改。 |
NotifyEnded() |
通知“播放到”接收器音频或视频播放已结束。 |
NotifyError() |
通知“播放到”接收器显示或播放媒体时出错。 |
NotifyLoadedMetadata() |
通知“播放到”接收器媒体的元数据已完成加载。 |
NotifyPaused() |
通知“播放到”接收器音频或视频播放已暂停。 |
NotifyPlaying() |
通知“播放到”接收器音频或视频播放已开始。 |
NotifyRateChange(Double) |
通知“播放到”接收器音频或视频播放速率已更改。 |
NotifySeeked() |
通知“播放到”接收器音频或视频播放元素已在新的播放位置启动。 |
NotifySeeking() |
通知“播放到”接收器音频或视频播放元素正在寻求新的播放位置。 |
NotifyStopped() |
通知“播放到”接收器音频或视频播放已停止。 |
NotifyTimeUpdate(TimeSpan) |
通知“播放到”接收器音频或视频播放的时间位置已更改。 |
NotifyVolumeChange(Double, Boolean) |
通知“播放到”接收器音频或视频播放的音量已更改。 |
StartAsync() |
开始接收“播放到”命令。 |
StopAsync() |
停止接收“播放到”命令。 |
事件
CurrentTimeChangeRequested |
当播放的时间位置发生更改时发生。 |
MuteChangeRequested |
音频已静音或取消静音时发生。 |
PauseRequested |
音频或视频播放已暂停时发生。 |
PlaybackRateChangeRequested |
在音频或视频播放速率更改时发生。 |
PlayRequested |
音频或视频播放开始时发生。 |
SourceChangeRequested |
当“播放到”接收器的源媒体发生更改时发生。 |
StopRequested |
当已请求“播放到”接收器停止播放流式传输的媒体时发生。 |
TimeUpdateRequested |
在当前播放位置更改时发生。 |
VolumeChangeRequested |
当源音频或视频的音量已更改时发生。 |