我正在使用AVPlayerViewController在iPad-App上播放视频文件(H.264,AAC,MP4-Container).
一切都在iOS 10中运行.而且在iOS 11中它正确播放视频.

但是在iOS 11中,当我开始向任何方向滑动时,它会立即使视频变黑并且还会使音频静音.它还会在底部的时间轴旁边显示一个加载指示器.

它也忽略了allowsPictureInPicturePlayback属性,因此它不会在iOS 11上显示PIP-Button.

这是我使用的代码:

avPlayerController = AVPlayerViewController()
avPlayerController?.showsPlaybackControls = true
avPlayerController?.allowsPictureInPicturePlayback = true
avPlayerController?.player = AVPlayer(url: videoUrl as URL)
avPlayerController?.player?.play()            

self.present(self.avPlayerController!,animated: true,completion: nil)            

avPlayerController?.player?.actionAtItemEnd = AVPlayerActionAtItemEnd.none
NotificationCenter.default.addobserver(self,selector: #selector(onVideoCompleted),name: NSNotification.Name.AVPlayerItemDidplayToEndTime,object: self.avPlayerController!.player?.currentItem)

此功能可在视频结束时关闭视频播放器:

func onVideoCompleted(notification:Notification) {
    self.avPlayerController?.player = nil
    self.avPlayerController?.dismiss(animated: true,completion: nil)
}

当屏幕黑屏时,我在控制台中看到了这个:

AVOutputDevicediscoverySession (figRoutediscoverer) 
>>>> -[AVfigRoutediscovererOutputDevicediscoverySessionImpl 
outputDevicediscoverySessionDidChangediscoveryMode:]: Setting device discovery 
mode to discoveryMode_Presence (client: MyAppName)
好的,我发现了错误:
要在按“完成”时关闭Airplay视频播放,我使用了以下代码:
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if avPlayerController?.isBeingdismissed ?? false {
        avPlayerController?.player = nil
    }
}

但是对于iOS 11,Apple添加了一项功能,通过轻扫手势关闭视频播放器.因此,当我滑动时,会调用viewWillAppear函数.将此代码放在viewDidAppear中修复此问题并保留AirPlay-Fix.

swift – 在iOS 11上滑动时AVPlayerViewController黑屏的更多相关文章

  1. ios – AVPlayer顶部的绘图按钮

    我必须在前一个视频中继的顶部画一个标签或按钮,留下评论.视频列表有它,一旦用户从表中选择一个项目,它需要播放,一旦播放器播放完成,那些按钮或标签应该出现在视频的顶部这是我的代码:像这样的要求解决方法您正在使用AVPlayerViewController,因此没有理由像AlessandroOrnano的回答那样访问您的应用程序窗口.为什么重新发明轮子?每个AVPlayerViewController

  2. ios – 如何替换MPMoviePlayer通知?

    在iOS9中,MPMoviePlayer和他的所有组件都已弃用.我们使用MPMoviePlayerController通知,如MPMoviePlayerLoadStateDidChangeNotification,MPMovieDurationAvailableNotification,MPMoviePlayerPlaybackStateDidChangeNotification,MPMovieP

  3. ios – 使用纯音频AVPlayer的AVPlayerViewController

    刚开始使用AVKit,我正在尝试播放一些音频.使用MasteringModernMediaPlayback中详细介绍的新AVPlayerViewController会很高兴,这样我就可以使用现成的播放/暂停/搜索UI.我基本上有一个带有容器视图的故事板,它有一个嵌入到AVPlayerViewController的segue.然后我用:它很好地嵌入并播放,但它有一个大的黑色QuickTime符号,视

  4. How to play video with AVPlayerViewController (AVKit) in Swift

    http://stackoverflow.com/questions/25932570/how-to-play-video-with-avplayerviewcontroller-avkit-in-swiftSwift3.0Necessary:importAVKit,importAVFoundationIfyouwanttouseAVPlayerViewController:letvideoURL

  5. swift – 在iOS 11上滑动时AVPlayerViewController黑屏

    我正在使用AVPlayerViewController在iPad-App上播放视频文件(H.264,AAC,MP4-Container).一切都在iOS10中运行.而且在iOS11中它正确播放视频.但是在iOS11中,当我开始向任何方向滑动时,它会立即使视频变黑并且还会使音频静音.它还会在底部的时间轴旁边显示一个加载指示器.它也忽略了allowsPictureInPicturePlayback属性

  6. ios – AVPlayer UITapGestureRecognizer无法正常工作

    请帮我们解决这个问题..谢谢!

  7. ios – 如何拦截AVPlayerViewController中的完成按钮?

    我创建一个AVPlayerViewController&在自定义UIViewController的viewDidAppear方法中附加的AVPlayer,但是当我按完成按钮时,我的自定义视图控制器将自动关闭.我想拦截这个动作,以便我自己解开Segue,但我不知道该怎么做?我找到了MPMoviePlayerViewController但不是AVPlayerViewController..我找到的代码

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部