标签: mpmediaquery

iPhone sdk,保存MPMediaItemCollection?

我的应用程序显示了一个MPMediaPickerController.我想保存MediaItem并在启动时重新开始播放.我认为这是可行的MPMediaQuery.看来,我应该使用MPMediaItemPropertyPersistentID但我不知道如何查询它.有什么想法吗?

iphone mpmediapickercontroller mpmediaquery

6
推荐指数
2
解决办法
4193
查看次数

iOS 音乐库:如何判断给定的播放列表是否是文件夹

假设我有一个具有以下播放列表结构的 iOS 音乐库:

A Folder
|
---> A Playlist
     |
     ---> Song A
Run Code Online (Sandbox Code Playgroud)

我运行以下代码:

import MediaPlayer

let playlists = MPMediaQuery.playlists().collections! as! [MPMediaPlaylist]
for playlist in playlists {
    let firstItemName = playlist.items.first?.title ?? "none"
    print("playlist: \(playlist.name!), first item: \"\(firstItemName)\"")
}
Run Code Online (Sandbox Code Playgroud)

我得到这个控制台输出:

播放列表:播放列表,第一项:“歌曲 A”

播放列表:A 文件夹,第一项:“歌曲 A”

我已经查看了所有 MediaPlayer 框架文档,但找不到任何方法来通过 API 发现播放列表和文件夹之间的父/子关系(或者甚至告诉集合包含其他集合)。我只想在用户浏览 A 文件夹后才显示 A 播放列表,而不是将它们显示为兄弟姐妹(或者甚至可能完全过滤掉 A 文件夹。

此外,文件夹和播放列表在运行时都具有相同的类:MPConcreteMediaPlaylist.

mpmediaitemcollection mpmediaquery ios swift

6
推荐指数
0
解决办法
164
查看次数

“MediaQuery.of(context).size” VS “LayouBuilder(BoxConstraints 约束)”

我是一个新的 Flutter 学习者。我正在尝试使用相同的代码库编写移动和网络应用程序。我想知道我应该在哪里使用MediaQuery.of(context).size以及在哪里LayouBuilder( BoxConstraints constraints)

还想知道在一个大型应用程序中仅使用其中一个是否有效,或者它们是相互补充的?

编辑:我也喜欢更多地了解这些方法的行为

  • 用户放大/缩小屏幕

  • 用户更改移动应用程序上的屏幕方向或桌面计算机上的网络浏览器大小

这两种情况哪种方法更适合呢?

mpmediaquery responsive-design flutter flutter-layoutbuilder

6
推荐指数
1
解决办法
3443
查看次数

NSNumber for MPMediaItemPropertyPersistentID到NSString并再次返回

我正在使用以下代码循环播放iPhone音乐库中的所有歌曲:

NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];

for (MPMediaItemCollection * item in songs){

    NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
    // Do something with it.
}

[songs release];
Run Code Online (Sandbox Code Playgroud)

很基本的东西.

我将PersistentID作为一个NSString因为我需要将其写入XML文件(通过网络传输到另一个设备).因此,我不能把它留作一个NSNumber.

然后另一个设备将通过再次发送PersistentID来要求iPhone播放曲目.

此时,iPhone有一个NSString应该播放的轨道的PersistentID.

再次循环播放每首歌曲并比较PersistentID直到我找到我想要的曲目将会很简洁,所以我试图用MPMediaPropertyPredicateiPhone来搜索我.

我正在使用以下代码进行搜索:

MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:persistentID forProperty:MPMediaItemPropertyPersistentID];

MPMediaQuery * songsQuery = [[MPMediaQuery alloc] init];
[songsQuery addFilterPredicate:predicate];

if ([[songsQuery items] count]){

    MPMediaItem * item = [[songsQuery items] objectAtIndex:0];
    // Play item.
}

[songsQuery release];
Run Code Online (Sandbox Code Playgroud)

哪里 …

iphone cocoa-touch objective-c mpmediaquery

5
推荐指数
1
解决办法
4154
查看次数

setVolume无法使用AVMutableAudioMixInputParameters从手机本地iPod库播放

我目前正在尝试使用AVPlayer从手机本地iPod库播放音乐,而不是使用应用程序控制器播放MPMusicPlayerController.

我可以使用和MPMediaQuery从本地iPod lib中选择一个曲目,但是当我尝试使用AVMutableAudioMixInputParameters在较低级别启动音频时,它似乎根本不会降低音量.

我使用AVPlayer而不是MPMusicPlayerController的原因是我在后台同时播放其他音频而MPMusicPlayerController无法播放,因为使用AVPlayer的现有音频文件正在占用硬件.我目前的代码是:

// just blindly select all music for now.
MPMediaQuery *everything = [[MPMediaQuery alloc] init];

NSArray *itemsFromGenericQuery = [everything items];
MPMediaItem *song;
NSMutableArray *array = [[NSMutableArray alloc] init];

for (song in itemsFromGenericQuery) 
{
    [array addObject:song];
}
Run Code Online (Sandbox Code Playgroud)

所以此时数组是我的lib中的一个轨道数组.

现在抓住一个并使用AVPlayer播放它:

// grab the first song off the array
MPMediaItem *song = [array objectAtIndex:0];
NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];

NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *track = [audioTracks objectAtIndex:0];

NSMutableArray *allAudioParams = [NSMutableArray array]; …
Run Code Online (Sandbox Code Playgroud)

iphone volume objective-c mpmediaquery avplayer

5
推荐指数
1
解决办法
2648
查看次数

使用MPMediaQuery通过评级查询ios库

我正在开发一个iphone 4应用程序,它根据不同的标准过滤本地媒体库.我已经能够按歌曲名称,艺术家和流派进行过滤.现在我需要添加一个评级过滤机制.我想的是"评级> = N星"(N:0..5)

我用来过滤的代码是:

allMedia = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2"     forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo];
[allMedia addFilterPredicate:mpp1];
Run Code Online (Sandbox Code Playgroud)

但是MPMediaPropertyPredicate不允许通过MPMediaItemPropertyRating进行过滤(实际上它适用于艺术家和歌曲标题).

2011-05-12 11:37:39.060 Radio3[1525:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'MPMediaPropertyPredicate cannot filter using the rating property.'
Run Code Online (Sandbox Code Playgroud)

我通过MPMediaItemPropertyRating谷歌,但似乎我应该找到一种替代方法来按轨道评级过滤.

有人可以给我一个提示吗?

谢谢

更新:这是我的代码来解决这个问题:

allMedia = [MPMediaQuery songsQuery];
//MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2"   forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo];
//MPMediaPropertyPredicate *mpp2 = [MPMediaPropertyPredicate predicateWithValue:@"Pop" forProperty:MPMediaItemPropertyGenre comparisonType:MPMediaPredicateComparisonContains];
//[allMedia addFilterPredicate:mpp1];
//[allMedia addFilterPredicate:mpp2];

//[myPlayer setQueueWithQuery:allMedia];


NSArray *itemsFromGenericQuery = [allMedia items];

NSMutableArray *mArray = [[NSMutableArray alloc] init];
int i = …
Run Code Online (Sandbox Code Playgroud)

mpmusicplayercontroller mpmediaquery ios

5
推荐指数
1
解决办法
3808
查看次数

Accessing the Movies and iTunes U videos on the iPad

In my app, I want to reproduce a view which looks exactly like the "Videos" native iPad app (it displays Movies and iTunes U videos located on the iPad).

I don't know how to access those elements on the iPad (Movies and iTunes U).

I've played with everything mentionned in the Apple documentation "IPod Library Access Programming Guide":

  • MPMediaItem
  • MPMediaPickerController
  • MPMediaQuery
  • MPMoviePlayerController …etc…

I thought I was close with MPMediaItem and MPMediaQuery, as two of the Flags seemed promising:

MPMediaTypeMovie …

mpmediaquery ipad ios avplayer

5
推荐指数
1
解决办法
905
查看次数

艺术家的专辑数量

这是我的问题=)

MPMediaQuery *artistQuery = [MPMediaQuery artistsQuery];
NSArray *songsByArtist = [artistQuery collections];
Run Code Online (Sandbox Code Playgroud)

如何在songsByArtist中获取MPMediaItemCollections的每位艺术家的专辑数量?

例如:

披头士乐队的3张专辑

AC/DC 6专辑

谢谢 !!

iphone mpmediaitem mpmediaitemcollection mpmediaquery

5
推荐指数
2
解决办法
2260
查看次数

如何获取 MPMediaItem(歌曲)收听时间(日期)

我想获取歌曲在特定时间段内的收听次数。使用MPMediaItemPropertyLastPlayedDate我只能获取最后一次播放歌曲的日期,因此如果我每天多次播放歌曲,则只有最后一次才算数。基本上,我想要做的是获取用户在特定时期(例如最近 2 天)的收听历史记录。此外,MPMediaItemPropertyPlayCount我还可以获得总体的总播放次数。

有任何想法吗?

谢谢。

mpmediaitem mpmediaquery ios

5
推荐指数
1
解决办法
1753
查看次数

Bug:使用 assetURL 在 iOS 和 MPMediaPropertyPredicate 上下载 MPMediaItem 状态

MPMedia API 中的有趣错误

我的音乐应用程序中存在一个持续存在的错误,我现在终于找到了它(现在我正在快速重写它)。它有几个方面。(使用系统音乐播放器)

  1. 我想我已经将问题范围缩小到具有以下属性的 MPMediaItem。
    • MPMediaItemPropertyIsCloudItem = true
    • 资产URL = nil
    • ** 这两个是有道理的,但是下面的极端情况(很可能很常见)让我困惑了一段时间**
    • 前两项可能是真的,但我相信如果你从 iTunes 复制它,它/可以/可以播放(它们对我来说大部分时间都会播放),但没有办法告诉你。我已经反复测试过这一点,似乎确实如此,但这些 MPMediaItems 的存在可能只会有时导致问题,或者它们很好。但你无法找出这些是哪些歌曲。
  2. 如果您正在播放队列,并且 systemMusicPlayer 在您的库中遇到一首歌曲但未从 iTunes 下载或复制,我相信它会自动跳过该歌曲,类似于 systemMusicPlayer.skipToNextItem(),但我认为在内部这是一个不同的机制。
    • 2a. 如果您正在使用 systemMusicPlayer.skipToPreviousItem() 并遇到一个本来会被跳过的项目,这种行为会导致基本上不可恢复的问题 - 这意味着,它无法识别您正在尝试移回队列并只是抛出错误并将队列向前移动。
    • 2b. 据我所知,当继续发生错误时,MPMediaItem 永远不会变成 nowPlayingItem。向后的问题因 MPMediaItem 元数据(无论是否在本地都始终可用)被加载而变得更加复杂,但尝试播放的歌曲会立即再次将其向前发送到队列中。

好吧,真是愚蠢又令人气愤。

现在回答我的问题:

对于无法知道云项目是否在设备上(通过 iTunes)的情况,我无能为力。但是,我/应该/能够过滤掉某个项目是否具有 assetURL,这保证了它是本地的且可用。

let filter:MPMediaPropertyPredicate = MPMediaPropertyPredicate(value: "ipod", forProperty: MPMediaItemPropertyAssetURL, comparisonType: MPMediaPredicateComparison.Contains)
Run Code Online (Sandbox Code Playgroud)

这将返回 0 个项目。有谁知道过滤此属性的方法?在这里这样做似乎是最干净的,并且应该让查询返回 items 和 itemSections。我的所有表都是从查询中填充的,我认为没有一种方法可以手动重建表。

URL 的格式如下:ipod-library://item/item.m4a?id=5314739480586915369

现在,我怀疑在填充表视图等时可以添加捕获,但感觉真的很混乱。

这是 ios 9.2.1、Swift 2、Xcode 7.2.1

我还没有擦手机并重新复制歌曲。如果 assetURL 不存在,则从音乐应用程序手动下载它们是项目获取 assetURL 的唯一方法。

mpmediaitem mpmediaquery ios swift

5
推荐指数
1
解决办法
983
查看次数