Browse Source

ATV playback: add media info

Felix Paul Kühne 9 years ago
parent
commit
ca8ec50dab

+ 19 - 0
Apple-TV/Playback/Playback Info/VLCPlaybackInfoMediaInfoTVViewController.h

@@ -0,0 +1,19 @@
+/*****************************************************************************
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2015 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan.org>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import "VLCPlaybackInfoPanelTVViewController.h"
+
+@interface VLCPlaybackInfoMediaInfoTVViewController : VLCPlaybackInfoPanelTVViewController
+
+@property (readwrite, nonatomic, weak) IBOutlet UILabel *titleLabel;
+@property (readwrite, nonatomic, weak) IBOutlet UILabel *metaDataLabel;
+
+@end

+ 151 - 0
Apple-TV/Playback/Playback Info/VLCPlaybackInfoMediaInfoTVViewController.m

@@ -0,0 +1,151 @@
+/*****************************************************************************
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2015 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan.org>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import "VLCPlaybackInfoMediaInfoTVViewController.h"
+
+@interface VLCPlaybackInfoMediaInfoTVViewController ()
+
+@end
+
+@implementation VLCPlaybackInfoMediaInfoTVViewController
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = NSLocalizedString(@"MEDIA_INFO", nil);
+    }
+    return self;
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    self.titleLabel.text = nil;
+    self.metaDataLabel.text = nil;
+
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(updateMediaTitle)
+                                                 name:VLCPlaybackControllerPlaybackMetadataDidChange
+                                               object:nil];
+}
+
+- (void)dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+    VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
+    self.titleLabel.text = vpc.mediaTitle;
+
+    VLCMediaPlayer *player = vpc.mediaPlayer;
+    VLCMedia *media = player.media;
+
+    NSArray *mediaTrackData = media.tracksInformation;
+    NSUInteger trackDataCount = mediaTrackData.count;
+    NSUInteger videoWidth = 0, videoHeight = 0;
+    NSString *videoCodec;
+    NSString *audioCodecs;
+    NSString *spuCodecs;
+    for (NSUInteger x = 0; x < trackDataCount; x++) {
+        NSDictionary *trackItem = mediaTrackData[x];
+        NSString *trackType = trackItem[VLCMediaTracksInformationType];
+        if ([trackType isEqualToString:VLCMediaTracksInformationTypeVideo]) {
+            videoWidth = [trackItem[VLCMediaTracksInformationVideoWidth] unsignedIntegerValue];
+            videoHeight = [trackItem[VLCMediaTracksInformationVideoHeight] unsignedIntegerValue];
+            videoCodec = [VLCMedia codecNameForFourCC:[trackItem[VLCMediaTracksInformationCodec] unsignedIntValue]
+                                            trackType:VLCMediaTracksInformationTypeVideo];
+        } else if ([trackType isEqualToString:VLCMediaTracksInformationTypeAudio]) {
+            NSString *language = trackItem[VLCMediaTracksInformationLanguage];
+            NSString *codec = [VLCMedia codecNameForFourCC:[trackItem[VLCMediaTracksInformationCodec] unsignedIntValue]
+                                                 trackType:VLCMediaTracksInformationTypeAudio];
+            if (audioCodecs) {
+                if (language)
+                    audioCodecs = [audioCodecs stringByAppendingFormat:@", %@ — %@", language, codec];
+                else
+                    audioCodecs = [audioCodecs stringByAppendingFormat:@", %@", codec];
+            } else {
+                if (language)
+                    audioCodecs = [NSString stringWithFormat:@"%@ — %@", language, codec];
+                else
+                    audioCodecs = codec;
+            }
+        } else if ([trackType isEqualToString:VLCMediaTracksInformationTypeText]) {
+            NSString *language = trackItem[VLCMediaTracksInformationLanguage];
+            NSString *codec = [VLCMedia codecNameForFourCC:[trackItem[VLCMediaTracksInformationCodec] unsignedIntValue]
+                                                 trackType:VLCMediaTracksInformationTypeText];
+            if (spuCodecs) {
+                if (language)
+                    spuCodecs = [spuCodecs stringByAppendingFormat:@", %@ — %@", language, codec];
+                else
+                    spuCodecs = [spuCodecs stringByAppendingFormat:@", %@", codec];
+            } else {
+                if (language)
+                    spuCodecs = [NSString stringWithFormat:@"%@ — %@", language, codec];
+                else
+                    spuCodecs = codec;
+            }
+        }
+    }
+
+    NSString *metaDataString = @"";
+    if (media.length.intValue > 0) {
+        metaDataString = [NSString stringWithFormat:@"%@: %@\n",
+         NSLocalizedString(@"DURATION", nil),
+         media.length.verboseStringValue];
+    }
+    if (!vpc.audioOnlyPlaybackSession) {
+        metaDataString = [metaDataString stringByAppendingFormat:@"%@: %@ (%@)\n",
+                          NSLocalizedString(@"VIDEO_DIMENSIONS", nil),
+                          [NSString stringWithFormat:NSLocalizedString(@"FORMAT_VIDEO_DIMENSIONS", nil),
+                          videoWidth, videoHeight],
+                          videoCodec];
+    }
+    NSInteger audioTrackCount = player.numberOfAudioTracks - 1; // minus fake disable track
+    if (audioTrackCount > 0) {
+        if (audioTrackCount > 1) {
+            metaDataString = [metaDataString stringByAppendingFormat:NSLocalizedString(@"FORMAT_AUDIO_TRACKS", nil),
+                              audioTrackCount];
+        } else {
+            metaDataString = [metaDataString stringByAppendingString:NSLocalizedString(@"ONE_AUDIO_TRACK", nil)];
+        }
+        NSLog(@"audioCodecs %@", audioCodecs);
+        metaDataString = [metaDataString stringByAppendingFormat:@" (%@)\n", audioCodecs];
+    }
+    NSInteger spuTrackCount = player.numberOfSubtitlesTracks - 1; // minus fake disable track
+    if (spuTrackCount > 0) {
+        if (spuTrackCount > 1) {
+            metaDataString = [metaDataString stringByAppendingFormat:NSLocalizedString(@"FORMAT_SPU_TRACKS", nil),
+                              spuTrackCount];
+        } else {
+            metaDataString = [metaDataString stringByAppendingString:NSLocalizedString(@"ONE_SPU_TRACK", nil)];
+        }
+        metaDataString = [metaDataString stringByAppendingFormat:@" (%@)\n", spuCodecs];
+    }
+    self.metaDataLabel.text = metaDataString;
+    [self.metaDataLabel sizeToFit];
+
+    [super viewWillAppear:animated];
+}
+
+- (CGSize)preferredContentSize
+{
+    return CGSizeMake(CGRectGetWidth(self.view.bounds), 31. + self.titleLabel.frame.size.height + 8. + self.metaDataLabel.frame.size.height + 82.);
+}
+
+- (void)updateMediaTitle
+{
+    self.titleLabel.text = [VLCPlaybackController sharedInstance].mediaTitle;
+}
+
+@end

+ 50 - 0
Apple-TV/Playback/Playback Info/VLCPlaybackInfoMediaInfoTVViewController.xib

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9527.1" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9525.1"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoMediaInfoTVViewController">
+            <connections>
+                <outlet property="metaDataLabel" destination="b7O-A0-Y88" id="NbQ-VD-PPT"/>
+                <outlet property="titleLabel" destination="BjN-MN-SPQ" id="ivu-is-23f"/>
+                <outlet property="view" destination="iN0-l3-epB" id="Eym-vH-oyN"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="1920" height="525"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="media title name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BjN-MN-SPQ">
+                    <rect key="frame" x="82" y="31" width="283" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="f0P-yq-3wI"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
+                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="b7O-A0-Y88">
+                    <rect key="frame" x="82" y="91" width="1756" height="403"/>
+                    <string key="text">Contra quos omnis dicendum breviter existimo. 
+Quamquam philosophiae quidem vituperatoribus satis responsum est eo libro, quo a nobis philosophia defensa et collaudata est, cum esset accusata et vituperata ab Hortensio.
+qui liber cum et tibi probatus videretur et iis, quos ego posse iudicare arbitrarer, plura suscepi veritus ne movere hominum studia viderer, retinere non posse.</string>
+                    <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
+                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="b7O-A0-Y88" secondAttribute="bottom" constant="31" id="9Cs-dk-Olf"/>
+                <constraint firstItem="BjN-MN-SPQ" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="82" id="fZq-fy-Xfm"/>
+                <constraint firstAttribute="trailing" secondItem="b7O-A0-Y88" secondAttribute="trailing" constant="82" id="pJQ-1G-ptw"/>
+                <constraint firstItem="b7O-A0-Y88" firstAttribute="leading" secondItem="BjN-MN-SPQ" secondAttribute="leading" id="uRq-r6-rcc"/>
+                <constraint firstItem="b7O-A0-Y88" firstAttribute="top" secondItem="BjN-MN-SPQ" secondAttribute="bottom" constant="20" id="v5i-ea-4Xs"/>
+                <constraint firstItem="BjN-MN-SPQ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="31" id="xv0-M9-ChE"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="1125" y="874.5"/>
+        </view>
+    </objects>
+</document>

+ 1 - 0
Apple-TV/Playback/Playback Info/VLCPlaybackInfoRateTVViewController.m

@@ -25,6 +25,7 @@
     }
     return self;
 }
+
 - (CGSize)preferredContentSize
 {
     return CGSizeMake(CGRectGetWidth(self.view.bounds), 100);

+ 2 - 2
Apple-TV/Playback/Playback Info/VLCPlaybackInfoTVViewController.m

@@ -11,7 +11,7 @@
 
 #import "VLCPlaybackInfoTVViewController.h"
 #import "VLCPlaybackInfoRateTVViewController.h"
-#import "VLCPlaybackInfoAudioTVViewController.h"
+#import "VLCPlaybackInfoMediaInfoTVViewController.h"
 #import "VLCPlaybackInfoTVAnimators.h"
 
 // just for appearance reasons
@@ -26,7 +26,7 @@
 {
     return @[
              [[VLCPlaybackInfoRateTVViewController alloc] initWithNibName:nil bundle:nil],
-             [[VLCPlaybackInfoAudioTVViewController alloc] initWithNibName:nil bundle:nil],
+             [[VLCPlaybackInfoMediaInfoTVViewController alloc] initWithNibName:nil bundle:nil],
              ];
 }
 

+ 0 - 32
Apple-TV/VLCPlaybackInfoAudioTVViewController.xib

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoAudioTVViewController">
-            <connections>
-                <outlet property="view" destination="SfU-3e-bi3" id="dbi-nU-kf2"/>
-            </connections>
-        </placeholder>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" id="SfU-3e-bi3">
-            <rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-            <subviews>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Put audio stuff here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RD5-yN-Bxj">
-                    <rect key="frame" x="884" y="530" width="151" height="21"/>
-                    <animations/>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-            </subviews>
-            <animations/>
-            <constraints>
-                <constraint firstItem="RD5-yN-Bxj" firstAttribute="centerY" secondItem="SfU-3e-bi3" secondAttribute="centerY" id="U6D-ND-4bN"/>
-                <constraint firstItem="RD5-yN-Bxj" firstAttribute="centerX" secondItem="SfU-3e-bi3" secondAttribute="centerX" id="eNA-sk-bI6"/>
-            </constraints>
-        </view>
-    </objects>
-</document>

+ 2 - 4
Apple-TV/VLCPlaybackInfoRateTVViewController.xib

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9527.1" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9525.1"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoRateTVViewController">
@@ -18,7 +18,6 @@
             <subviews>
                 <segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="a34-9y-ZcI">
                     <rect key="frame" x="783" y="16" width="354" height="70"/>
-                    <animations/>
                     <color key="backgroundColor" white="0.0" alpha="0.10000000000000001" colorSpace="calibratedWhite"/>
                     <segments>
                         <segment title="First"/>
@@ -29,7 +28,6 @@
                     </connections>
                 </segmentedControl>
             </subviews>
-            <animations/>
             <constraints>
                 <constraint firstItem="a34-9y-ZcI" firstAttribute="top" relation="greaterThanOrEqual" secondItem="vgW-9U-IlZ" secondAttribute="top" id="9aM-8g-ySI"/>
                 <constraint firstItem="a34-9y-ZcI" firstAttribute="centerX" secondItem="vgW-9U-IlZ" secondAttribute="centerX" id="FTw-3L-I11"/>

+ 1 - 0
Sources/VLCPlaybackController.h

@@ -76,6 +76,7 @@ currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
 @property (nonatomic, readonly) BOOL currentMediaHasTrackToChooseFrom;
 @property (nonatomic, readonly) BOOL activePlaybackSession;
 @property (nonatomic, readonly) BOOL audioOnlyPlaybackSession;
+@property (nonatomic, readonly) NSString *mediaTitle;
 @property (nonatomic, readwrite) BOOL fullscreenSessionRequested;
 @property (nonatomic, readonly) NSDictionary *mediaOptionsDictionary;
 @property (nonatomic, readonly) NSTimer* sleepTimer;

+ 5 - 0
Sources/VLCPlaybackController.m

@@ -525,6 +525,11 @@ NSString *const VLCPlaybackControllerPlaybackDidFail = @"VLCPlaybackControllerPl
     return _mediaIsAudioOnly;
 }
 
+- (NSString *)mediaTitle
+{
+    return _title;
+}
+
 - (float)playbackRate
 {
     float f_rate = _mediaPlayer.rate;

+ 10 - 10
VLC for iOS.xcodeproj/project.pbxproj

@@ -121,6 +121,8 @@
 		7D4CAAFC1BDE548A00A08EF5 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A79246C6170F11DF0036AAF2 /* Localizable.strings */; };
 		7D4DF2181B55209200739326 /* CoreSpotlight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4DF2171B55209200739326 /* CoreSpotlight.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
 		7D50903218F41C7900180139 /* VLCAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D50903118F41C7900180139 /* VLCAlertView.m */; };
+		7D51B3B01BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D51B3AE1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m */; };
+		7D51B3B11BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D51B3AF1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib */; };
 		7D5278D81BD7DEF600D0CA0E /* DropboxTVSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D5278D11BD7DE3D00D0CA0E /* DropboxTVSDK.framework */; };
 		7D5278DE1BD7DF1800D0CA0E /* DropboxTVSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7D5278D11BD7DE3D00D0CA0E /* DropboxTVSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		7D5278E21BD7E06E00D0CA0E /* VLCDropboxController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D3784AA183A9906009EE944 /* VLCDropboxController.m */; };
@@ -325,8 +327,6 @@
 		DD8095E51BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */; };
 		DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */; };
 		DD8095EC1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */; };
-		DD8095F21BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F01BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.m */; };
-		DD8095F31BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095F11BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.xib */; };
 		DD8095F61BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F51BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m */; };
 		DD8095F91BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F81BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m */; };
 		DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */; };
@@ -661,6 +661,9 @@
 		7D4DF2171B55209200739326 /* CoreSpotlight.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreSpotlight.framework; path = System/Library/Frameworks/CoreSpotlight.framework; sourceTree = SDKROOT; };
 		7D50903018F41C7900180139 /* VLCAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCAlertView.h; path = Sources/VLCAlertView.h; sourceTree = SOURCE_ROOT; };
 		7D50903118F41C7900180139 /* VLCAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCAlertView.m; path = Sources/VLCAlertView.m; sourceTree = SOURCE_ROOT; };
+		7D51B3AD1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoMediaInfoTVViewController.h; sourceTree = "<group>"; };
+		7D51B3AE1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoMediaInfoTVViewController.m; sourceTree = "<group>"; };
+		7D51B3AF1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoMediaInfoTVViewController.xib; path = "Playback/Playback Info/VLCPlaybackInfoMediaInfoTVViewController.xib"; sourceTree = "<group>"; };
 		7D5278C31BD7DE3D00D0CA0E /* DropboxSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = DropboxSDK.xcodeproj; path = ImportedSources/Dropbox/DropboxSDK/DropboxSDK.xcodeproj; sourceTree = SOURCE_ROOT; };
 		7D5C204D17999A74004F9443 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = "<group>"; };
 		7D5CAA871A4AD763003F2CBC /* VLCTrackSelectorTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCTrackSelectorTableViewCell.h; path = Sources/VLCTrackSelectorTableViewCell.h; sourceTree = SOURCE_ROOT; };
@@ -954,9 +957,6 @@
 		DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoRateTVViewController.h; sourceTree = "<group>"; };
 		DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoRateTVViewController.m; sourceTree = "<group>"; };
 		DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCPlaybackInfoRateTVViewController.xib; sourceTree = "<group>"; };
-		DD8095EF1BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoAudioTVViewController.h; sourceTree = "<group>"; };
-		DD8095F01BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoAudioTVViewController.m; sourceTree = "<group>"; };
-		DD8095F11BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCPlaybackInfoAudioTVViewController.xib; sourceTree = "<group>"; };
 		DD8095F41BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTVAnimators.h; sourceTree = "<group>"; };
 		DD8095F51BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTVAnimators.m; sourceTree = "<group>"; };
 		DD8095F71BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoPanelTVViewController.h; sourceTree = "<group>"; };
@@ -1644,10 +1644,10 @@
 				7D3E528A1BD7B5E100309D15 /* VLCCloudServicesTVViewController.xib */,
 				7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */,
 				DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */,
-				DD8095F11BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.xib */,
 				DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */,
 				7D7EF3D91BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib */,
 				DDEAECF51BDFEAFA00756C83 /* VLCLocalNetworkServerTVCell.xib */,
+				7D51B3AF1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib */,
 			);
 			name = xibs;
 			sourceTree = "<group>";
@@ -2104,8 +2104,8 @@
 				DD8095F81BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m */,
 				DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.h */,
 				DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */,
-				DD8095EF1BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.h */,
-				DD8095F01BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.m */,
+				7D51B3AD1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.h */,
+				7D51B3AE1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m */,
 			);
 			path = "Playback Info";
 			sourceTree = "<group>";
@@ -2395,8 +2395,8 @@
 				7D7EF3DB1BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib in Resources */,
 				7DDE41901BE9225A0065C53A /* VLCAboutViewController.xib in Resources */,
 				7D405EE21BEA1FAD006ED886 /* index.html in Resources */,
+				7D51B3B11BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib in Resources */,
 				7DEDD38D1BE936F30053802C /* SourceCodePro-Regular.ttf in Resources */,
-				DD8095F31BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2616,6 +2616,7 @@
 				7D7EF3DD1BD5779F00CD4CEE /* VLCPlaybackController.m in Sources */,
 				DD3EFF361BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserNetService.m in Sources */,
 				7D1334831BE135700012E919 /* VLCCloudStorageTVTableViewController.m in Sources */,
+				7D51B3B01BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m in Sources */,
 				7D13347C1BE132EA0012E919 /* VLCLocalNetworkServiceBrowserUPnP.m in Sources */,
 				DDEAECF11BDFE9E800756C83 /* VLCServerListTVTableViewController.m in Sources */,
 				7DEC8BDE1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m in Sources */,
@@ -2631,7 +2632,6 @@
 				7D5278E21BD7E06E00D0CA0E /* VLCDropboxController.m in Sources */,
 				7DEC8BD91BD670EB006E1093 /* VLCPlaybackNavigationController.m in Sources */,
 				7DEC8BDA1BD67112006E1093 /* VLCFrostedGlasView.m in Sources */,
-				DD8095F21BE510770065D8E1 /* VLCPlaybackInfoAudioTVViewController.m in Sources */,
 				DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m in Sources */,
 				DD3EAC051BE153B4003668DA /* VLCNetworkImageView.m in Sources */,
 				7D0C35341BD97C7B0058CD19 /* VLCOneDriveObject.m in Sources */,