【问题标题】:React Native Sound Error: Argument 1 (RCTResponseSenderBlock) of RNSound.play must not be nullReact Native Sound 错误:RNSound.play 的参数 1 (RCTResponseSenderBlock) 不能为空
【发布时间】:2021-10-11 15:13:05
【问题描述】:

据我所知,我正在加载正确的资源。 但是,当我尝试使用 React Native Sound 播放声音时,我仍然收到以下错误:

Argument 1 (RCTResponseSenderBlock) of RNSound.play must not be null

如何解决这个错误?

我检查了保存声音对象的变量,看起来它已经加载了:

 LOG  this.outgoingCall {"_duration": 18.1811875, "_filename": "http://localhost:8081/assets/assets/sounds/dialing.mp3?platform=ios&hash=717d95726264d7105360ce45119c9e0e", "_key": 35, "_loaded": true, "_numberOfChannels": 2, "_numberOfLoops": 0, "_pan": 0, "_pitch": 1, "_playing": false, "_speed": 1, "_volume": 1, "onPlaySubscription": {"remove": [Function remove]}, "registerOnPlay": [Function anonymous]}
 LOG  this.incomingCall {"_duration": 5.224458333333334, "_filename": "http://localhost:8081/assets/assets/sounds/calling.mp3?platform=ios&hash=0707a09b5a0268a9cb3e6f9b8d5b32ec", "_key": 36, "_loaded": true, "_numberOfChannels": 2, "_numberOfLoops": 0, "_pan": 0, "_pitch": 1, "_playing": false, "_speed": 1, "_volume": 1, "onPlaySubscription": {"remove": [Function remove]}, "registerOnPlay": [Function anonymous]}
 LOG  this.endCall {"_duration": 1.306, "_filename": "http://localhost:8081/assets/assets/sounds/end_call.mp3?platform=ios&hash=90aad40264cc274ce67046ab241054c0", "_key": 37, "_loaded": true, "_numberOfChannels": 2, "_numberOfLoops": 0, "_pan": 0, "_pitch": 1, "_playing": false, "_speed": 1, "_volume": 1, "onPlaySubscription": {"remove": [Function remove]}, "registerOnPlay": [Function anonymous]}

如果您只是继续到最后,您将在单击呼叫按钮时看到错误...

ConnectyCube 的示例代码运行良好,但它使用旧的反应导航。 下面是 ConnectyCube 示例代码的链接:

https://github.com/ConnectyCube/connectycube-reactnative-samples/tree/master/RNVideoChatConf

我基本上只是使用了最新的反应导航,但其余代码与 connectycube 的示例代码相同,但它的工作方式不一样....我收到 React Native 声音错误...

【问题讨论】:

    标签: react-native connectycube react-native-sound


    【解决方案1】:

    看起来在您的 javascript 中,v0.11.1 中的 .play() 方法由于此提交而需要回调 https://github.com/zmxv/react-native-sound/commit/ed05fb96f06bbdfc83499b6ced04043f90fbf07d(删除默认回调)。

    它可能会在未来的版本中得到修复,或者可能会更新文档以更改方法签名以要求回调。

    现在您可以添加回调,错误应该会消失

    .play((success)=> console.log(success))
    

    【讨论】:

      【解决方案2】:

      这不是最好的答案,但它仍然有效。 在示例代码 package.json 中有:“react-native-sound”:“^0.11.0”, 当我遇到问题时,我使用的是最新版本的 react-native-sound 0.11.X

      我最初只是使用npm i react-native-sound 安装的 并接受了它给我的任何版本,我认为它是最新的和最新的版本。

      遇到上述问题后,我决定通过以下方式安装完全相同的代码版本:npm install react-native-sound@0.11.0 这样就解决了问题....

      【讨论】:

      • 谢谢哥们。这只是让 IOS 工作 ;-)
      【解决方案3】:

      除了查看并相信错误之外,这里没有什么可以做的。它说参数不能为空。

      我会从该错误消息中获取信息,并检查您是否在某处第一次渲染组件时将 null 传递给 play 方法。

      您可能在某处有一个状态值或道具,它仅在第一次渲染时为空,并在调用play 后从useEffect 或类似方法获取其值。

      【讨论】:

      • 有一个代码示例具有完全相同的代码。示例代码可以正常工作并播放声音,没有任何错误。就我而言,我有一个错误。是否有我需要添加的依赖项或设置???
      【解决方案4】:

      我遇到了同样的问题,版本没有改变,但对于其他问题,我删除了 pods / npm 并重新安装。不知道发生了什么变化。

      为播放函数添加回调解决了它

                 if (this.shortBeep) this.shortBeep.play((success) => {
                      if (!success) {
                          console.log('Sound did not play')
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 2019-12-09
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-30
        • 2017-10-15
        • 1970-01-01
        相关资源
        最近更新 更多