使用 Avplayer 在后台播放视频

2024-07-03

在我的 iPhone 应用程序中,我想在应用程序进入后台模式时继续播放视频。

我正在使用 AVPlayer,但没有找到任何在后台播放视频的方法。如果有人能在这方面帮助我,我将非常感激。 谢谢


我可以惊讶地说这是可以实现的,而且我刚刚做到了。

此方法支持所有可能性:

  • 屏幕被用户锁定;
  • 按下主页按钮;
  • 切换到其他应用程序。

只要你有一个实例AVPlayer运行 iOS 会阻止设备自动锁定。

首先,您需要配置应用程序以支持 Info.plist 文件中的音频背景,添加UIBackgroundModes排列audio元素。

然后将你的AppDelegate.m放入- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

这些方法

[[AVAudioSession sharedInstance] setDelegate: self];    
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

and #import <AVFoundation/AVFoundation.h>

然后在你的视图控制器中控制AVPlayer

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

and

- (void)viewWillDisappear:(BOOL)animated
{
    [mPlayer pause];    
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

然后回应

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
            if([mPlayer rate] == 0){
                [mPlayer play];
            } else {
                [mPlayer pause];
            }
            break;
        case UIEventSubtypeRemoteControlPlay:
            [mPlayer play];
            break;
        case UIEventSubtypeRemoteControlPause:
            [mPlayer pause];
            break;
        default:
            break;
    }
}

如果用户按下主页按钮,则需要另一个技巧来恢复再现(在这种情况下,再现会暂停并淡出)。

当你控制视频的再现时(我有play: and pause:方法)设置

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

and

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];

以及要调用的相应方法,该方法将启动计时器并恢复再现。

- (void)applicationDidEnterBackground:(NSNotification *)notification
{
    [mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Avplayer 在后台播放视频 的相关文章

  • 如何在 Xcode 4 中使用 git 移动文件和文件夹?

    我熟悉 Xcode 中组和实际目录之间的差异 我总是在查找器中创建一个实际文件夹并将其拖到项目中 确保未选中 复制 当我移动文件夹时 我仅通过引用删除项目 将它们移动到查找器中 然后重新添加它们 现在我第一次使用git 在测试中发现 如果我
  • Xcode 7 UIWebView 不加载 url

    我在我的应用程序中使用 UIWebView 它在 Xcode4 5 6 模拟器中运行良好 但不适用于 Xcode 7 模拟器 我不知道为什么 模拟器中没有警告或错误 屏幕只显示空白页 请帮我 谢谢 import IndexViewContr
  • 在 Parse iOS 中链接用户 ID 和安装 ID

    在 Parse 仪表板的数据浏览器窗格中 我看到安装和用户类 但是 对于特定设备上的特定用户 objectId 不匹配 现在 用户订阅的频道仅在安装类中可见 有没有什么方法可以将用户 ID 来自用户类别 链接到安装 ID 以便可以知道用户订
  • 将 Float 数组写入二进制文件并在 swift 中读取

    我怎样才能写数组Float到二进制文件然后读取它 var array Float 0 1 0 2 0 3 func writeArrayToBinary array Float func readArrayFromBinary gt Flo
  • 嵌入了 iOS 项目的 OSX 项目 - 找不到 UIKit.h [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个 OSX 项目和一个 iOS 子项目 子项目使用 UIKit h 但即使子项目已将 UIKit 框架添加到 链接二进制文件与库 部
  • 开发者拒绝后在新的 iTunes Connect 中提交新的应用程序版本

    我从新 iTunes Connect 的提交队列中删除了我的构建 现在 当我向应用程序商店提交新版本时 它们会显示在 预发布 下 但不会显示在 版本 下 所以现在我的应用程序信息中只显示 1 0 准备出售 1 0 25 开发人员已拒绝 在
  • 如何测试为 SKProductsRequest 设置不同的区域设置

    我正在 iPhone 应用程序中实现 IAP 并在沙盒环境中工作 我有我的代码设置要处理SKProducts由返回SKProductsRequest获取定价信息 我想测试检索不同区域设置中的价格值 例如欧元或日元 以测试我的格式化代码 我怎
  • iOS 9 中的触觉

    您可以在 iPhone 6s 上使用 iOS 9 中的 Taptic 引擎吗 WatchOS2 和 OS X 能够使用触觉引擎 所以我认为 iOS 9 中也会有 但我找不到任何 API 是的 我对内部进行了逆向工程UIKit我发现了另一种
  • 应用程序删除后的iOS应用程序持久设置

    我们正在创建一个应用程序 如下所示 用户从 2 个免费 代币 开始 用户可以通过应用内购买 0 99 美元购买一包 10 个代币 我们已经实现了这个使用NSUserDefaults保存令牌数量 有没有办法让我们的免费 2 令牌设置持久化 即
  • 没有可编译的体系结构(ARCHS=i386、VALID_ARCHS=arm64 armv7 armv7s)

    Preface 我确实看过类似的问题 https stackoverflow com questions 22328882 xcode 5 1 no architectures to compile for only active arch
  • 什么是“响应 backboardd 的终止而终止”?

    我在滑块的帮助下使用一段代码在视图上添加阴影 滑块设置为 15 到 15 此代码在以下情况下效果很棒slider value为正 但如果为负 应用程序将停止工作 崩溃日志很奇怪Terminating in response to backb
  • 如何才能运行性能测试十次以上?

    默认情况下 Xcode 性能测试会运行十次 我的结果是这十次测试的平均值 问题是每次运行时平均结果变化很大 因此我必须运行测试至少五次才能获得收敛结果 这既乏味又耗时 有没有办法配置 XCode 或单元测试本身运行十次以上 XCTestCa
  • 提交到 AppStore:发现意外的 Mach-O 标头代码:0x72613c21

    我构建了一个 iOS 应用程序 我想将其提交给 Apple 以便让我的同事测试它 我首先清理了工作区 我使用的是 CocoaPods 然后将其存档 然后我进入 档案 窗口并单击 上传到 App Store 出现以下错误 发现意外的 Mach
  • 蓝牙管理器在 iOS 7 上不工作

    我尝试在 iOS 7 上的应用程序中使用蓝牙管理器 但它似乎不起作用 Calling setEnabled and setPowered 蓝牙管理器上没有任何效果 我正在注册通知 BluetoothAvailabilityChangedNo
  • 以编程方式 Swift 在 UIView 上添加 UITextField

    我是 Swift 和 iOS 编程新手 我试图创建一个UITextField以编程方式使用 Swift 但无法完全正确 另外 如何将其更改为半透明效果以淡入背景 var myField UITextField UITextField fra
  • iOS 版本的 Fragment

    谁能告诉我在 Xcode iPhone 中执行以下操作的最佳方法是什么 我有一个主导航屏幕 上面有一些按钮 当用户单击任何按钮时 他们将进入带有更多选项按钮的子导航屏幕 在这里 他们单击任意按钮 就会看到选项列表 单击任何列表选项都会向用户
  • 删除 iOS 中的后台位置警报?

    我正在编写一个跟踪用户位置的导航应用程序 为了继续显示有关路线的通知 当手机锁定 接听电话等时 我还需要在应用程序处于后台时继续跟踪位置 Capabilities gt Background Modes gt Location update
  • IOS - React Native - 未处理的 JS 异常:SyntaxError

    每当我创建新的 React Native 项目时 我都会遇到问题 显示红色屏幕 并在 xcode 控制台中收到以下错误消息 嗨 我有同样的问题 在这里找到了解决方案 https github com facebook react nativ
  • 导航回 ViewController 时出现重复消息问题

    我有一个 ViewController 它向用户显示更多信息 然后他们单击一个按钮 它将它们发送到我的 messageView 它是一个 JSQ ViewController JSQViewController 使用集合视图类 当用户导航回
  • 界面生成器中 UIView 的边框颜色不起作用?

    我正在尝试通过 IB 设置视图的图层属性 除了边框的颜色之外 一切正常 属性layer borderColor 我记得一年前遇到过这个问题 最终我以编程方式解决了这个问题 而且 我仍然可以以编程方式执行此操作 但我很好奇为什么layer b

随机推荐