问题标签 [mpmediaplayercontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
330 浏览

swift3 - 无法从元数据中获取键值作为字符串

我正在从 MPMediaItem 中获取元数据,如下所示:

但是,当我打印出一块元数据时,“key”会打印为数值而不是“pcst”,如打印输出所示:

-----metadata:<AVMetadataItem: 0x1740153f0, identifier=itsk/pcst, keySpace=itsk, key class = __NSCFNumber, key=pcst, commonKey=(null), extendedLanguageTag=(null), dataType=com.apple.metadata.datatype.int8, time={INVALID}, duration={INVALID}, startDate=(null), extras={ dataLength = 1; dataType = 21; dataTypeNamespace = "com.apple.itunes"; }, value=1> -----metadata.key:Optional(1885565812)

所有元数据/密钥都发生这种情况(此特定媒体项目中有 29 个)。

还要注意这行代码:

导致此错误: Could not cast value of type '__NSCFNumber' (0x1b80dcdf0) to 'NSString' (0x1b80edae8).

如何获取键 ("pcst") 的字符串值?

0 投票
0 回答
541 浏览

ios - MPNowPlayingInfoCenter 未在 ios 10 的真实设备中的锁屏中显示播放器信息

我正在开发音乐播放器应用程序,当手机被锁定时,歌曲信息将显示在锁屏中,我在其中添加了以下方法

- (void)applicationWillResignActive:(UIApplication *)appdelegate的应用

现在歌曲信息显示在模拟器的锁定屏幕中,但在 os 10.2 的真实设备中不显示。我还添加了 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 如果有人知道我做错了什么,请帮忙?

0 投票
3 回答
693 浏览

mpmediaplayercontroller - 无法使用 MPMusicPlayerMediaItemQueueDescriptor 设置 MPMusicPlayerController 队列

此代码导致沉默:

我已经浏览了代码,我们到达了player.play(). 我有一个 MPMediaItem 并且我已经正确地形成了一个 MPMediaItemCollection 和一个MPMusicPlayerMediaItemQueueDescriptor。那为什么我的播放器不玩了?

0 投票
1 回答
167 浏览

ios - 使用计时器时 UI 滞后

我正在使用每秒重复一次的计时器来更新正在播放的内容currentPlaybackTime,因此我每秒都会根据当前歌曲的进度更新我的标签。我曾经使用NSTimer或在 Swift aTimer中每秒重复一次,但是在更改歌曲或开始和停止歌曲时遇到问题,秒标签会滞后(当你听到这首歌时,它会保持 5 秒不变)播放,然后会更新到正确的时间)。然后我继续使用 GCD,我遇到了同样的问题,即使在后台队列中也是如此。然后我去使用 DispatchSourceTimer,我得到了以下日志:

说“Fired”的是实际的偶数处理程序,DispatchSourceTimer而“Timer Fired”在更新标签等的处理程序函数中。很明显,您可以看到计时器工作正常,但似乎主线程被大量使用。

这是我的代码:

这里是通知观察者:

我维护了一个对象的观察者数组,这些对象希望在定时器触发时得到通知。

我做了一个测试并删除了 for 循环,只是通知了列表中的第一个观察者,它确实加快了速度,但仍然没有解决问题。

如果我只是播放歌曲并且几秒钟后主线程实际上可以处理它并且我可以完美地显示时间,但是当做繁重的事情时,比如使用MPMediaPlayer框架来改变歌曲或调用时play()pause()开始MPMusicPlayerController滞后。

任何帮助,将不胜感激。谢谢你。

0 投票
0 回答
83 浏览

ios - MPMediaPlayer prepend 不跟踪队列

我有一个使用 Swift 编写的音乐应用程序,我发现了一个错误,Apple 承认这是他们的错误。

在应用程序中,我可以点击一个按钮并根据当前播放的歌曲播放歌曲。我正在使用 prepend 创建队列。因此,例如,当我想将特定类型添加到我使用的队列中时

MediaManager.shared.getSongsWithCurrentArtistFor是_

.

此代码有效!它将流派添加到队列中,但不跟踪队列。我会解释

.

我期望发生的是歌曲 1 出现,然后是歌曲 2,然后是歌曲 3,以此类推。从歌曲 3 开始,如果我点击后退按钮,我希望回到歌曲 2,然后前进按钮将前进到歌曲 3。

实际发生的是歌曲 1 出现,然后是歌曲 2,然后是歌曲 3,当我从歌曲 3 中点击后退按钮时,它不会回到歌曲 2,而是随机播放一首歌曲,点击前进按钮不会进入歌曲 3但另一首随机歌曲。

第一个返回歌曲按钮点击通常会留在流派中,但下一个将转到我在点击使用前置代码的按钮之前正在播放的歌曲。

我向 Apple 提交了代码级支持票,过了一会儿,工程师说问题不在于我,而是在 Apple 端,并指示我也提交错误报告并包括票#,他们将帮助找到解决方法。那是 **2 个月前*,我再也没有收到回音。

我希望有人能帮忙。

0 投票
1 回答
362 浏览

ios - IOS 媒体播放器 - 跳到特定时间

我想知道:是否有任何方法可以使用 IOS Mediaplayer 跳到特定时间或跳过特定时间?我在文档中找不到类似的东西。

有一个属性 myMediaPlyer.currentPlaybackTime

还有方法 myMediaPlayer.beginSeekingForward()

但该方法只是以快速模式播放音乐,这不是我想要的。只是想知道是否有人知道如何处理这个

0 投票
1 回答
316 浏览

ios - 使用 MPMediaPlayer Swift 4 淡化(动画)音量

我正在使用 Xcode 10+、Swift 4,并使用 MPMediaPlayer 定位 iOS 11.4+

我想以编程方式淡出播放器的音量(就像苹果在你退出他们的音乐播放器时所做的那样)。同样,我不想在它运行时看到任何东西(比如 VolumeView 显示)。

看起来所有程序化音量控制都已被弃用。

我已经阅读了很多相关的帖子并创建了这个有几个问题的函数:

第一个问题:VolumeView 显示在屏幕上。我尝试过使用不同的帧,并更改 alpha 等。就好像动画永远不会发生,它直接进入完成块。

第二个问题:VolumeView 确实需要从超级视图中删除,否则即使我使用手机音量按钮,它也会保持隐藏状态。它只应在执行此功能期间隐藏。

第三个问题:动画块什么都不做。音量会立即从起点变为 0 - 不会褪色。

第四个问题:我没有对此进行测试,但我的假设是当应用程序在后台时这将不起作用。因此,在退出应用程序时使用它来淡出音量的想法可能行不通。

知道如何在屏幕上不显示任何内容的情况下淡出音量吗?答案不一定需要使用 MPVolumeView,但我需要它与 MPMediaPlayer 以及在退出 App 时一起使用。

编辑:下面是我修改后的代码,它将使音量减弱,但是当我的应用程序终止时能够做到这一点的问题仍然存在。我可以从“appWillTerminate”调用此代码,但是它不会完全运行,因为应用程序在它可以一直循环之前终止。

0 投票
2 回答
1604 浏览

ios - 音乐信息显示在命令中心但不显示锁定屏幕

使用 Swift 4+、iOS 11+、Xcode 10+

我已经使用 MPMediaPlayer 构建了一个音乐播放器,我可以从命令中心与它进行交互,但是我希望也能够在锁定屏幕上看到它。

老实说,我对它为什么在命令中心显示/工作感到有点困惑,因为我没有编写任何代码来执行此操作。不过,我也希望它显示在锁定屏幕中。

这是我到目前为止所做的:

1)我正在使用 applicationMusicPlayer 并确定在我的测试期间正在播放一些东西:

2) 将 BackgroundModes 设置为包括音频、获取和远程通知

在此处输入图像描述

3)添加了 AVAudioSession 代码(它似乎没有做任何事情,因为我已经尝试过并尝试将其注释掉并没有发现任何区别):

4)使用此基本代码查看是否可以仅使用一些基本的硬编码内容将其显示在锁定屏幕上:

5) 我知道我没有实施任何主动更新信息或响应任何命令的操作,因为此时我只是想在锁定屏幕上显示一些内容。

如果我没有做任何操作,为什么现在正在播放的信息显示在指挥中心?

我需要做什么才能让信息像在命令中心中一样显示在锁定屏幕上?

编辑:链接到在 GitLab 上有相同问题的简单项目:https ://gitlab.com/whoit/lockscreentest

编辑:我已将此作为错误提交给 Apple,但他们尚未确认或解决此问题。

0 投票
1 回答
26 浏览

ios - 是否可以从 iPad 的视频应用程序中挑选电影、复制或直接在我们的 iOS 应用程序中播放?

我们的要求是在我们的 iOS 应用程序中嵌入/复制使用 iTunes 从 Mac 传输到 iPad 的所有视频,以便他们可以使用 AVPlayer 而不是使用默认视频应用程序从我们的应用程序本身播放视频。

这可能吗?如果有怎么办?我查看了 MPMediaLibrary 但无法获得任何工作样本或任何有关此的信息。

0 投票
0 回答
70 浏览

ios - MPMusicPlayerControllerNowPlayingItemDidChange 是不可预测的

基本上 MPMusicPlayerControllerNowPlayingItemDidChange 是非常不可预测的。有时它会被调用一次,有时会被调用两次,有时它会在歌曲播放时随机调用。我需要找到一种方法来忽略虚假通知调用,只处理音乐项目实际上从一个项目更改为另一个项目的时间。

我尝试查看 currentPlaybackTime == 0 是否然后才处理通知,但有时歌曲更新并且它们的播放时间不是 0。我还尝试创建一个缓冲区,只允许新项目在旧项目之后更新某个时间项目已更新,但这确实不可靠,因为在极少数情况下,当我在音乐播放器队列中添加新歌曲时,通知会在歌曲中间发送。