c# - 调用 Play() 后 CrossMediaManager.Current.Status 没有改变
问题描述
我正在使用Plugin.MediaManager
从 url 播放音频。我使用CrossMediaManager.Current.Status
.
代码 :
if(CrossMediaManager.Current.Status == MediaPlayerStatus.Stopped)
{
await CrossMediaManager.Current.Play(url);
}
else if(CrossMediaManager.Current.Status == MediaPlayerStatus.Playing) // this never called because status is always stopped.
{
await CrossMediaManager.Current.Pause();
}
else if(CrossMediaManager.Current.Status == MediaPlayerStatus.Paused)
{
await CrossMediaManager.Current.PlaybackController.Pause();
}
为什么这里的状态没有改变?请帮忙。
谢谢
解决方案
如果没有看到Plugin.MediaManager的完整实现,很难确切地知道出了什么问题。
下面是Plugin.MediaManager的工作实现,它使用来自Azure 媒体播放器演示页面的视频剪辑。
可以在此处找到完整的示例应用程序:https ://github.com/brminnick/AzureMediaServicesSampleApp
public class NativeVideoPlayerPage : ContentPage
{
public NativeVideoPlayerPage()
{
CrossMediaManager.Current.RequestHeaders.Add("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cm46bWljcm9zb2Z0OmF6dXJlOm1lZGlhc2VydmljZXM6Y29udGVudGtleWlkZW50aWZpZXIiOiI5ZGRhMGJjYy01NmZiLTQxNDMtOWQzMi0zYWI5Y2M2ZWE4MGIiLCJpc3MiOiJodHRwOi8vdGVzdGFjcy5jb20vIiwiYXVkIjoidXJuOnRlc3QiLCJleHAiOjE3MTA4MDczODl9.lJXm5hmkp5ArRIAHqVJGefW2bcTzd91iZphoKDwa6w8");
const int horizontalButtonPadding = 5;
const int verticalButtonPadding = 10;
var videoView = new VideoView
{
Source = @"https://amssamples.streaming.mediaservices.windows.net/830584f8-f0c8-4e41-968b-6538b9380aa5/TearsOfSteelTeaser.ism/manifest(format=m3u8-aapl)";
AspectMode = Plugin.MediaManager.Abstractions.Enums.VideoAspectMode.AspectFit
};
var playButton = new Button { Text = "Play" };
playButton.Clicked += HandlePlayButtonClicked;
var pauseButton = new Button { Text = "Pause" };
pauseButton.Clicked += HandlePauseButtonClicked;
var stopButton = new Button { Text = "Stop" };
stopButton.Clicked += HandleStopButtonClicked;
var relativeLayout = new RelativeLayout();
relativeLayout.Children.Add(videoView,
Constraint.Constant(0),
Constraint.Constant(0),
Constraint.RelativeToParent(parent => parent.Width),
Constraint.RelativeToParent(parent => parent.Height));
relativeLayout.Children.Add(playButton,
Constraint.Constant(horizontalButtonPadding),
Constraint.RelativeToParent(parent => parent.Height - verticalButtonPadding - getPlayButtonHeight(parent)),
Constraint.RelativeToParent(parent => (parent.Width - 4 * horizontalButtonPadding) / 3));
relativeLayout.Children.Add(pauseButton,
Constraint.RelativeToView(playButton, (parent, view) => view.X + view.Width + horizontalButtonPadding),
Constraint.RelativeToParent(parent => parent.Height - verticalButtonPadding - getPauseButtonHeight(parent)),
Constraint.RelativeToParent(parent => (parent.Width - 4 * horizontalButtonPadding) / 3));
relativeLayout.Children.Add(stopButton,
Constraint.RelativeToView(pauseButton, (parent, view) => view.X + view.Width + horizontalButtonPadding),
Constraint.RelativeToParent(parent => parent.Height - verticalButtonPadding - getStopButtonHeight(parent)),
Constraint.RelativeToParent(parent => (parent.Width - 4 * horizontalButtonPadding) / 3));
Title = "Native Video Player";
Content = relativeLayout;
double getPlayButtonHeight(RelativeLayout p) => playButton.Measure(p.Width, p.Height).Request.Height;
double getPauseButtonHeight(RelativeLayout p) => pauseButton.Measure(p.Width, p.Height).Request.Height;
double getStopButtonHeight(RelativeLayout p) => stopButton.Measure(p.Width, p.Height).Request.Height;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
CrossMediaManager.Current.Pause();
}
void HandlePlayButtonClicked(object sender, EventArgs e) => CrossMediaManager.Current.Play();
void HandleStopButtonClicked(object sender, EventArgs e) => CrossMediaManager.Current.Stop();
void HandlePauseButtonClicked(object sender, EventArgs e) => CrossMediaManager.Current.Pause();
}
推荐阅读
- java - 从其他单独文件夹中的不同文件夹编译 java 文件
- c# - 为什么即使不存在分隔符,string.Split(" ") 也会返回元素?
- php - Need Help on Filtering the json to grab only the values
- python - Tkinter 以错误的比例保存画布
- c# - Versions not resolving for Nuget packages
- docker - 构建缺少Newtonsoft.Json的docker镜像时.net核心构建错误
- android - 仅针对基本活动的依赖注入使子活动崩溃
- elasticsearch - 使用弹性搜索查询 DSL 对 Kibana 中某个字段的所有值求和
- java - 如何运行我在 TI-84 Plus 计算器上编写的 java 程序?
- python - How can I find the indices of the quantiles of an array?