保持其他应用程序的背景音频播放,react-native-video IOS

9

长期听众,第一次来电。

我试图在我的react-native应用中使用背景音乐(例如Spotify),但是当我导航到一个使用react-native-video的屏幕时,它经常会停止播放。在安卓上,不需要进行任何更改即可正常工作。我使用的是react-native(非expo)并且目前正在测试testflight。

如果这是重复的问题,请告诉我,但是我只能找到许多关于如何使应用程序在后台播放的文章(我的问题相反),而且我可能不知道IOS用于控制此类操作的术语。需要注意的是,该组件的其中一个实例包含音频,但是大多数呈现的视频没有音频。

我已经尝试过:

  1. 按照react-native-video文档中的说明更新AppDelgate.m:

AppDelegate.m

    #import <AVFoundation/AVFoundation.h>  // import
    
     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      ...
      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];  // allow
      ...
    }

  • 这似乎没有任何效果。
  1. 使用 ignoreSilentSwitch="ignore"obey
  • Obey 成功允许背景音频继续播放,但会静音那些带有音频的视频。
  • 查看源代码,ignoreSilentSwitch=obey 执行的操作与我添加到 AppDelegate.m 文件中的操作相同,如果您使用 isPaused 属性,也会被否定。
  • 尝试了许多其他涉及音频的属性,希望能得到幸运的结果。
  1. 在 Xcode 中的我的应用目标上添加 "Audio、Airplay 和 Picture in Picture" 背景模式 = "音频" 能力。

  2. 略微哭泣并质疑我的人生选择。

我使用 react-native-video 和 react-native-video-controls 实现了它,但据我所知,它是具有附加功能的相同模块。下面是实现方式:

<VideoContainer>
    <VideoPlayer
      source={currentVideo}
      navigator={null}
      ref={videoRef}
      resizeMode={'cover'}
      controlTimeout={1500}
      paused={isPaused}
      repeat={true}
      muted={true}
      tapAnywhereToPause={true}
      disableBack={true}
      disableTimer={true}
      disableVolume={true}
      disableFullscreen={true}
      showOnStart={true}
      hideShutterView={true}
    />
 </VideoContainer>

任何帮助、建议、反馈或反驳都非常感激!
5个回答

3

罪犯找到了。

我正在使用 react-native-audio 播放某些定时声音,覆盖静音和非静音视频。

当您调用 react-native-sound Sound.setCategory() 方法时,可选的第二个参数是一个“mix-with-others”布尔值。将其设置为 true 并按照 AppDelegate.m 中 react-native-video 建议的 AVAudioSession 配置即可。

IOS 类别(除了 react-native-sound 中建议的 Playback): ios 声音类别

帮助我找到类似问题的问题

有关音频的有用 IOS 文档:

这个

以及这个


2

添加这三个属性可以生效:

<Video
    ...
    ignoreSilentSwitch="obey"
    muted={true}
    disableFocus
/>

2
我认为这里有一个属性。
mixWithOthers

尝试将其设置为“混合”


0

iOS开发:

如果使用react-native-video,您还应该添加:

  • 将ignoreSilentSwitch属性设置为"ignore"

-1

我看到您缺少启用背景音频的属性。引用文档:

playInBackground 确定应用程序在后台时媒体是否应继续播放。这使客户可以继续听取音频。

false(默认)- 不要继续播放媒体

true - 继续播放媒体 要在iOS上使用此功能,您必须:

在Xcode项目中启用背景音频 将ignoreSilentSwitch属性设置为“ignore” 平台:Android ExoPlayer、Android MediaPlayer、iOS


谢谢Menethor!是的,在我多次尝试中,我也加入了这个,并且它确实适用于Android。我已经发布了我的答案来解决我遇到的IOS问题。 - Nathan Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接