- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 AVPlayerViewController
在我的应用中播放短视频。
如果在用户在我的应用中播放视频之前有一个应用在后台播放音频,我希望在我的视频播放器关闭后恢复另一个应用的后台音频播放。我目前使用 AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation)
来做到这一点。
即使在我调用 AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation)
后苹果的音乐应用程序和播客应用程序确实恢复播放——如果没有调用就不会继续播放,所以这意味着这个调用确实有效果——我测试过的第 3 方音乐或播客应用程序(Spotify、SoundCloud、Amazon Music、Overcast)都没有。
这是我的代码:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// I know it's not the best place to call setActive nor it covers all the cases. It's just a convenient place to put the code to test its effect after dismissing the video player.
do {
try AVAudioSession.sharedInstance().setActive(false, with: .notifyOthersOnDeactivation)
} catch {
print(error)
}
}
@IBAction func play(_ sender: Any) {
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
let playerController = AVPlayerViewController()
playerController.player = AVPlayer(url: URL(string: "http://gslb.miaopai.com/stream/UkjiD45ddxZFQ79I2bLaGg__.mp4")!)
playerController.player?.play()
present(playerController, animated: true)
}
起初我认为这可能是这些第 3 方应用程序的错。但后来我用官方推特应用程序测试了它们,发现它们可以在推特应用程序播放视频后恢复音频播放。
那我错过了什么?我应该怎么做才能让这些第 3 方应用在我的应用中播放视频后恢复音频播放,就像 Twitter 应用一样?
PS:这里是完整的 project所以有兴趣的人可以试试。
最佳答案
I want the background audio playing of the other app to resume after my video player is dismissed
您需要接受这不取决于您。 您所能做的就是妥善管理您的 Audio Session 。其他应用程序是否“接受提示”并恢复其音频不在您的控制范围内。
但是,您没有正确地管理您的 Audio Session 。你应该:
一般使用无干扰的类别(例如环境光)。
更改您的播放类别并仅在您需要时(即仅当我们真正要播放时)激活它
播放完毕后,使用 notifyOthersOnDeactivation
停用,然后切换回无干扰的音频类别(例如 Ambient)并激活它。
一旦你完成了这些事情,你就已经完成了所有你能做的。有些应用会恢复,有些则不会。
关于ios - 解散 AVPlayerViewController 后如何恢复其他应用程序的音频播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42407925/
在 Apple API Reference 中,它说不要像上面那样子类化 AVPlayerViewController。我想知道为什么。我特意写了一个演示子类AVPlayerViewControlle
当我们播放视频并返回到父窗口时,我遇到内存泄漏。请参阅下面的分配工具读数屏幕截图。 每次,当我弹出 View Controller (显示视频)时,都会有一些与 AVFoundation 相关的对象占
我正在为我的应用程序设计登录屏幕,我希望在其中有动画 Logo 。我创建了一个小视频文件(大约 1 Mb)并使用以下代码创建了 AVPlayerViewController 实例: let video
正确的 UIKit 方法: 根据 Apple 的 WWDC 2019 talk on the subject , AVPlayerViewController 应以模态方式呈现,以利用 API 的所有
我有一个 AVPlayerViewController我用 AVPlayer 初始化还有一些 AVPlayerItem (iOS 10、Xcode 8、Objective C)。AVPlayerVie
所以我试图从这个项目源编辑一些源代码... https://github.com/ariiyu/VideoPlayerSample 所以,当我只是尝试替换视频路径并文件时,它崩溃了,我不知道为什么?
在我的 tvOS 应用程序中,我有一个 AVPlayerViewController,通过显示转场呈现,如果没有找到视频,它会显示警报并展开到上一个 View 。我创建一个警报 Controller
我已经实现了一个标准的 Swift 视频播放器:- let path = NSBundle.mainBundle().pathForResource(assetName, ofType: "m4
我正在使用 AVPlayerViewController 来播放视频。问题是如何检测视频是否开始播放?通常是添加目标,但我找不到可以在该事件中添加的任何目标。有人能帮我吗?提前致谢。 最佳答案 使用来
如果先前的 View Controller 已实例化,我的自定义 AVPlayerViewController 将不会自动旋转。如果我呈现 AVPlayerViewController,它会旋转,如果
我必须快速创建一个视频流应用程序(使用远程网址)。但没有任何确切的视频格式。有时它可以是 m3u8 有时是 mp4 等..但我的视频播放器应该支持来自后端的格式。 此外,当应用程序在后台时,音频应该播
我正在为 iOS 开发一个应用程序,我已经构建了代码,一旦选择了 TableView 中的单元格,它就会转至 AVPlayerViewController 并根据选择的单元格行播放本地视频剪辑。但是当
我们可以将自定义播放速度(0.5、1.0、1.5、2.0)控制添加到 AVPlayerViewController 吗? 有没有一种方法可以使用 UISlider 值更改来刷新速度? 如果正在播放,我
我使用 AVPlayerViewController,我想在视频结束时淡出...我可以捕获视频结束事件,并且我为 AVPlayer 编写的代码可以工作,但对于 AVPlayerViewControll
我在我的项目中添加了一个 DemoVideo.mp4 并将其添加到复制资源文件中。但是当我运行该应用程序时,它不会播放我的视频。这是我的方法。 private func setUpAndPlayVid
我想知道 AVPlayerViewController 何时被关闭或退出全屏以更改其父 View Controller 布局,但我没有找到一个委托(delegate)方法来告诉我它何时发生。 我试过像
我想在使用 AVPlayerViewController 时删除音频和字幕按钮。我按如下方式创建 Controller : // Create the view controller and play
我使用 AVPlayerViewController 播放视频,它工作正常。但是当时设备映射方向运行时它不显示 AVPlayerViewController 状态栏。所以我无法关闭 AVPlayerV
在我的 View Controller 上,我添加了一个 AVPlayerViewController 作为子 Controller 。 它能够播放来自网络的音频和视频文件。但是,我想在按下暂停按钮或
我创建了一个播放器并且大部分时间都运行良好。 在某些情况下(我没有意识到为什么)屏幕视频保持黑色,播放按钮不执行任何操作。 我验证了 url,没问题,这不是问题。 在我的 viewController
我是一名优秀的程序员,十分优秀!