Xamarin.iOS中MPMoviePlayerController无法播放MP4视频问题咨询
解决Xamarin.iOS中MPMoviePlayerController无法播放远程MP4的问题
嘿,我瞅见你遇到的问题了——能播放.m3u8的HLS流媒体,但远程MP4就是播不了,问题其实出在代码里的一个关键设置上,咱们来一步步解决它。
问题出在哪?
你代码里写了这么一行:
moviePlayer.SourceType = MPMovieSourceType.File;
MPMovieSourceType.File这个枚举值是专门给本地文件用的,可你加载的是远程HTTP链接的MP4视频啊!类型完全不匹配,播放器自然没法正确加载资源。至于为什么.m3u8能播?大概率是因为HLS本身是流媒体格式,系统自动忽略了这个错误的类型设置,但MP4就没这么“宽容”了。
怎么修复?
很简单,只需要调整SourceType的设置,有两种靠谱的方式:
- 方式一:明确设置为流媒体类型:把
SourceType改成MPMovieSourceType.Streaming,直接告诉播放器这是远程流媒体资源(MP4也属于流媒体范畴) - 方式二:直接删掉这行代码:让播放器自动根据URL判断资源类型(更推荐这种,兼容性更好,不管是本地还是远程资源都能自动适配)
给你贴个修改后的代码示例:
moviePlayer = new MPMoviePlayerController(new NSUrl("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")); // 设置视频播放器外观 moviePlayer.View.Frame = new RectangleF(10, 80, 300, 200); moviePlayer.View.BackgroundColor = UIColor.Clear; // 这里移除错误的SourceType设置,或者改成MPMovieSourceType.Streaming // moviePlayer.SourceType = MPMovieSourceType.Streaming; // 可选的另一种写法 // 页面加载时自动播放 moviePlayer.ShouldAutoplay = true; // 预加载视频保持就绪状态 moviePlayer.PrepareToPlay(); // 启用默认嵌入式控件 moviePlayer.ControlStyle = MPMovieControlStyle.Default; View.AddSubview(moviePlayer.View);
额外要注意的点
- HTTP访问权限:iOS 9及以上系统默认禁止非HTTPS的网络请求,你得在
Info.plist里配置NSAppTransportSecurity,允许目标域名的HTTP请求,不然视频连加载都做不到。 - 错误排查:可以监听播放完成的通知,获取具体的错误原因,方便排查其他潜在问题:
NSNotificationCenter.DefaultCenter.AddObserver(MPMoviePlayerController.PlaybackDidFinishNotification, (notification) => { var finishReason = (MPMovieFinishReason)notification.UserInfo[MPMoviePlayerController.FinishReasonUserInfoKey]; if (finishReason == MPMovieFinishReason.PlaybackError) { Console.WriteLine("视频播放出错啦,检查下资源链接或网络配置!"); // 这里可以进一步获取错误详情 } });
内容的提问来源于stack exchange,提问作者Dev Maran
相关产品推荐
相关产品推荐

