口吃和音轨开始播放多次

Posted

技术标签:

【中文标题】口吃和音轨开始播放多次【英文标题】:Stutter and track starts playing multiple times 【发布时间】:2017-10-08 06:42:37 【问题描述】:

在使用 Spotify 播放器时,我们偶尔会遇到持续大约 10 秒的口吃。虽然有几个方面对我来说似乎不正常,但最一致的迹象是,我们不止一次地点击了didStartPlayingTrack 委托方法,即使我们只告诉玩家玩一次。有没有人知道什么会导致这种情况发生?

重要提示:这是spotify-ios-sdk version 0.21

日志样本:

audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyTrackDelivered") // Last track ended
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyAudioDeliveryDone")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyPause")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyMetadataChanged")
movePlayerPosition(_:completion:)[L:180]: seek successful to 0.842
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyMetadataChanged")
13:13:50 audioStreaming(_:didStartPlayingTrack:)[L:377]: didStartPlayingTrack: Optional("So Far Away (Live) - Live")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyTrackChanged")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackEventAudioFlush")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyPlay")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyMetadataChanged")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyMetadataChanged")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyContextChanged")
13:14:01 audioStreaming(_:didStartPlayingTrack:)[L:377]: didStartPlayingTrack: Optional("So Far Away (Live) - Live")
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackNotifyTrackChanged")
audioStreaming(_:didSeekToPosition:)[L:474]: did seek to position: 0.001
audioStreaming(_:didReceive:withName:)[L:412]: didReceiveEvent: Optional("SPPlaybackEventAudioFlush")

有没有办法防止这种口吃的发生?

更新

我已切换到版本 25,但仍然遇到此问题。我发现的口吃日志中一个明显的特征是,在大多数歌曲的开头,除非特别要求,否则我没有得到didSeekToPosition 代表;但是,当遇到口吃时,我会在口吃开始时看到以下内容:

audioStreaming(_:didStartPlayingTrack:)[L:377]: didStartPlayingTrack
audioStreaming(_:didSeekToPosition:)[L:474]: did seek to position: 0.001

需要明确的是,只有一种方法调用playSpotifyUri;但是,这个 didStartPlaying 代表会被多次命中。

【问题讨论】:

【参考方案1】:

iOS SDK 现在是 Beta 25 版本,您是否考虑过升级?我建议这样做,看看它是否能解决您的问题。

我需要查看您的具体实现才能进行调试。

【讨论】:

您好 Arielle,我正在积极考虑更新到 25 作为选项,25 中有一些不相关的问题导致升级有点麻烦。不幸的是,这个问题很少发生,很难重新创建并知道 25 本身是否没有问题。谢谢你的建议! 我已经更新了我的 sdk,虽然 sdk 有一些很大的改进,但我仍然遇到口吃问题。我已经更新了我的问题。 @chasenyc 太好了 - 您更新的日志有点帮助。我会看看我是否有时间研究一下。

以上是关于口吃和音轨开始播放多次的主要内容,如果未能解决你的问题,请参考以下文章

盒子外挂字幕文件和音轨文件的测试结果

如何在不发出单独请求的情况下将元数据和音轨从广播流中分离出来

SwiftUI 上出现 AVAudioPlayer 多次播放

垃圾收集器是否受益于对Collect和WaitForPendingFinalizers()的多次调用?

android在应用程序/活动中嵌入默认音频播放器

音频播放器循环多次运行