AtomicString InbandTextTrackPrivateAVCF::label() const
{
    if (!m_mediaSelectionOption)
        return emptyAtom;

    RetainPtr<CFStringRef> title;

    RetainPtr<CFArrayRef> commonMetaData = adoptCF(AVCFMediaSelectionOptionCopyCommonMetadata(mediaSelectionOption()));
    RetainPtr<CFArrayRef> titles = adoptCF(AVCFMetadataItemCopyItemsWithKeyAndKeySpace(commonMetaData.get(), AVCFMetadataCommonKeyTitle, AVCFMetadataKeySpaceCommon));
    CFIndex titlesCount = CFArrayGetCount(titles.get());
    if (!titlesCount)
        return emptyAtom;

    // If possible, return a title in one of the user's preferred languages.
    RetainPtr<CFArrayRef> preferredLanguages = CFLocaleCopyPreferredLanguages();
    RetainPtr<CFArrayRef> titlesForPreferredLanguages = AVCFMediaSelectionCopyOptionsFromArrayFilteredAndSortedAccordingToPreferredLanguages(titles.get(), preferredLanguages.get());
    CFIndex preferredTitlesCount = CFArrayGetCount(titlesForPreferredLanguages.get());
    if (preferredTitlesCount) {
        AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titlesForPreferredLanguages.get(), 0));
        title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
    }

    if (!title) {
        AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titles.get(), 0));
        title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
    }

    return title ? AtomicString(title.get()) : emptyAtom;
}
AtomicString InbandTextTrackPrivateLegacyAVCF::label() const
{
    if (!m_playerItemTrack)
        return emptyAtom;

    RetainPtr<CFStringRef> title;

    RetainPtr<AVCFAssetTrackRef> assetTrack = adoptCF(AVCFPlayerItemTrackCopyAssetTrack(m_playerItemTrack.get()));
    RetainPtr<CFArrayRef> commonMetaData = adoptCF(AVCFAssetTrackCopyCommonMetadata(assetTrack.get()));
    RetainPtr<CFArrayRef> titles = adoptCF(AVCFMetadataItemCopyItemsWithKeyAndKeySpace(commonMetaData.get(), AVCFMetadataCommonKeyTitle, AVCFMetadataKeySpaceCommon));
    CFIndex titlesCount = CFArrayGetCount(titles.get());
    if (titlesCount) {
        RetainPtr<CFLocaleRef> currentLocale = adoptCF(CFLocaleCopyCurrent());
        RetainPtr<CFArrayRef> titlesForPreferredLanguages = adoptCF(AVCFMetadataItemCopyItemsWithLocale(titles.get(), currentLocale.get()));
        CFIndex preferredTitlesCount = CFArrayGetCount(titlesForPreferredLanguages.get());
        if (preferredTitlesCount) {
            AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titlesForPreferredLanguages.get(), 0));
            title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
        }

        if (!title) {
            AVCFMetadataItemRef titleMetadata = static_cast<AVCFMetadataItemRef>(CFArrayGetValueAtIndex(titles.get(), 0));
            title = adoptCF(AVCFMetadataItemCopyStringValue(titleMetadata));
        }
    }

    return title ? AtomicString(title.get()) : emptyAtom;
}