Как решить, когда MPMediaItem assetURL равен нулю?

Я работаю над кодом, который просматривает видео пользователя и передает их AVPlayer посредством AVPlayerItem, который принимает URL.

Чтобы получить все видео на устройстве iOS, вы можете сделать:

let videoNumber = MPMediaType.anyVideo.rawValue
let predicate = MPMediaPropertyPredicate.init(value: videoNumber, forProperty: MPMediaItemPropertyMediaType)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicate)

if let items = query.items
{
    mediaCollection = MPMediaItemCollection(items: items)

    // -1 would indicate an error condition
    print("number of items in collection is \(mediaCollection?.count ?? -1)")
}

Когда вы выбираете MPMediaItem, который вы хотите использовать из items массив, должен быть assetURL пойти с этим.

Беда, на моем устройстве, все мои assetURL свойства равны NULL. По совпадению, пока hasProtectedAsset для каждого из этих предметов есть false, isCloudItem для каждого из этих предметов есть true,

Как я могу придумать действительный assetURL что я могу передать любому медиаплееру? Похоже на то, что разработчики не могут получить правильные ссылки и доступ к медиафайлам в пользовательской библиотеке iPod.

1 ответ

MPMediaItemPropertyAssetURL/MPMediaItem assetURL имеет значение null/nil по двум причинам.

  1. Музыка не загружается на ваше устройство, но добавляется только в музыкальную библиотеку.
  2. Музыка загружена, но защищена DRM.

Актив, защищенный DRM, невозможно воспроизвести с помощью AVPlayer, он может воспроизводиться только с использованием MPMusicPlayer. Поэтому вам необходимо проверить две вещи, прежде чем продолжить работу с AVPlayer.

  1. MPMediaItemPropertyAssetURL - это ноль?
  2. MPMediaItem защищен?

Пожалуйста, смотрите код ниже....

let itemUrl = targetMPMediaItem?.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
if itemUrl != nil {
    let theAsset = AVAsset(url: itemUrl!)
    if theAsset.hasProtectedContent {
        // Its DRM protected
    } else {
        // Do whatever you anat to do
    }
} else {
    //probably the asset is not downloaded to this device
}
Другие вопросы по тегам