1 /*****************************************************************************
2 * VLCMedia.h: VLCKit.framework VLCMedia header
3 *****************************************************************************
4 * Copyright (C) 2007 Pierre d'Herbemont
5 * Copyright (C) 2007 the VideoLAN team
8 * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
25 #import <Foundation/Foundation.h>
26 #import "VLCMediaList.h"
29 /* Meta Dictionary Keys */
31 * Standard dictionary keys for retreiving meta data.
33 extern NSString
* VLCMetaInformationTitle
; /* NSString */
34 extern NSString
* VLCMetaInformationArtist
; /* NSString */
35 extern NSString
* VLCMetaInformationGenre
; /* NSString */
36 extern NSString
* VLCMetaInformationCopyright
; /* NSString */
37 extern NSString
* VLCMetaInformationAlbum
; /* NSString */
38 extern NSString
* VLCMetaInformationTrackNumber
; /* NSString */
39 extern NSString
* VLCMetaInformationDescription
; /* NSString */
40 extern NSString
* VLCMetaInformationRating
; /* NSString */
41 extern NSString
* VLCMetaInformationDate
; /* NSString */
42 extern NSString
* VLCMetaInformationSetting
; /* NSString */
43 extern NSString
* VLCMetaInformationURL
; /* NSString */
44 extern NSString
* VLCMetaInformationLanguage
; /* NSString */
45 extern NSString
* VLCMetaInformationNowPlaying
; /* NSString */
46 extern NSString
* VLCMetaInformationPublisher
; /* NSString */
47 extern NSString
* VLCMetaInformationEncodedBy
; /* NSString */
48 extern NSString
* VLCMetaInformationArtworkURL
; /* NSString */
49 extern NSString
* VLCMetaInformationArtwork
; /* NSImage */
50 extern NSString
* VLCMetaInformationTrackID
; /* NSString */
52 /* Notification Messages */
54 * Available notification messages.
56 extern NSString
* VLCMediaMetaChanged
; //< Notification message for when the media's meta data has changed
58 // Forward declarations, supresses compiler error messages
62 typedef enum VLCMediaState
64 VLCMediaStateNothingSpecial
, //< Nothing
65 VLCMediaStateBuffering
, //< Stream is buffering
66 VLCMediaStatePlaying
, //< Stream is playing
67 VLCMediaStateError
, //< Can't be played because an error occured
71 * Informal protocol declaration for VLCMedia delegates. Allows data changes to be
74 @protocol VLCMediaDelegate
75 // TODO: SubItemAdded/SubItemRemoved implementation. Not sure if we really want to implement this.
77 // * Delegate method called whenever a sub item has been added to the specified VLCMedia.
78 // * \param aMedia The media resource that has received the new sub item.
79 // * \param childMedia The new sub item added.
80 // * \param index Location of the new subitem in the aMedia's sublist.
82 // - (void)media:(VLCMedia *)media addedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
85 // * Delegate method called whenever a sub item has been removed from the specified VLCMedia.
86 // * \param aMedia The media resource that has had a sub item removed from.
87 // * \param childMedia The sub item removed.
88 // * \param index The previous location of the recently removed sub item.
90 // - (void)media:(VLCMedia *)aMedia removedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
93 * Delegate method called whenever the meta has changed for the receiver.
94 * \param aMedia The media resource whose meta data has been changed.
95 * \param oldValue The old meta data value.
96 * \param key The key of the value that was changed.
98 - (void)media
:(VLCMedia
*)aMedia metaValueChangedFrom
:(id
)oldValue forKey
:(NSString
*)key
;
101 * Delegate method called whenever the media was parsed.
102 * \param aMedia The media resource whose meta data has been changed.
105 - (void)mediaDidFinishParsing
:(VLCMedia
*)aMedia
;
109 * Defines files and streams as a managed object. Each media object can be
110 * administered seperately. VLCMediaPlayer or VLCMediaList must be used
111 * to execute the appropriate playback functions.
112 * \see VLCMediaPlayer
115 @interface VLCMedia
: NSObject
117 void * p_md
; //< Internal media descriptor instance
118 NSURL
* url
; //< URL (MRL) for this media resource
119 VLCMediaList
* subitems
; //< Sub list of items
120 VLCTime
* length
; //< Cached duration of the media
121 NSMutableDictionary
* metaDictionary
; //< Meta data storage
122 id delegate
; //< Delegate object
123 BOOL isArtFetched
; //< Value used to determine of the artwork has been parsed
124 BOOL areOthersMetaFetched
; //< Value used to determine of the other meta has been parsed
125 BOOL isArtURLFetched
; //< Value used to determine of the other meta has been preparsed
126 VLCMediaState state
; //< Current state of the media
132 * Manufactures a new VLCMedia object using the URL specified.
133 * \param anURL URL to media to be accessed.
134 * \return A new VLCMedia object, only if there were no errors. This object will be automatically released.
135 * \see initWithMediaURL
137 + (id
)mediaWithURL
:(NSURL
*)anURL
;
140 * Manufactures a new VLCMedia object using the path specified.
141 * \param aPath Path to the media to be accessed.
142 * \return A new VLCMedia object, only if there were no errors. This object will be automatically released.
145 + (id
)mediaWithPath
:(NSString
*)aPath
;
150 * \return a new VLCMedia object, only if there were no errors. This object
151 * will be automatically released.
152 * \see initAsNodeWithName
154 + (id
)mediaAsNodeWithName
:(NSString
*)aName
;
158 * Initializes a new VLCMedia object to use the specified URL.
159 * \param aPath Path to media to be accessed.
160 * \return A new VLCMedia object, only if there were no errors.
162 - (id
)initWithURL
:(NSURL
*)anURL
;
165 * Initializes a new VLCMedia object to use the specified path.
166 * \param aPath Path to media to be accessed.
167 * \return A new VLCMedia object, only if there were no errors.
169 - (id
)initWithPath
:(NSString
*)aPath
;
174 * \return A new VLCMedia object, only if there were no errors.
176 - (id
)initAsNodeWithName
:(NSString
*)aName
;
179 * Returns an NSComparisonResult value that indicates the lexical ordering of
180 * the receiver and a given meda.
181 * \param media The media with which to compare with the receiver.
182 * \return NSOrderedAscending if the URL of the receiver precedes media in
183 * lexical ordering, NSOrderedSame if the URL of the receiver and media are
184 * equivalent in lexical value, and NSOrderedDescending if the URL of the
185 * receiver follows media. If media is nil, returns NSOrderedDescending.
187 - (NSComparisonResult
)compare
:(VLCMedia
*)media
;
191 * Receiver's delegate.
193 @
property (assign
) id delegate
;
196 * A VLCTime object describing the length of the media resource, only if it is
197 * available. Use lengthWaitUntilDate: to wait for a specified length of time.
198 * \see lengthWaitUntilDate
200 @
property (retain
, readonly
) VLCTime
* length
;
203 * Returns a VLCTime object describing the length of the media resource,
204 * however, this is a blocking operation and will wait until the preparsing is
205 * completed before returning anything.
206 * \param aDate Time for operation to wait until, if there are no results
207 * before specified date then nil is returned.
208 * \return The length of the media resource, nil if it couldn't wait for it.
210 - (VLCTime
*)lengthWaitUntilDate
:(NSDate
*)aDate
;
213 * Determines if the media has already been preparsed.
215 @
property (readonly
) BOOL isParsed
;
218 * The URL for the receiver's media resource.
220 @
property (retain
, readonly
) NSURL
* url
;
223 * The receiver's sub list.
225 @
property (retain
, readonly
) VLCMediaList
* subitems
;
228 * The receiver's meta data as a NSDictionary object.
230 @
property (retain
, readonly
) NSDictionary
* metaDictionary
;
233 * The receiver's state, such as Playing, Error, NothingSpecial, Buffering.
235 @
property (readonly
) VLCMediaState state
;
238 * Sets a value of the metaDictionary
240 - (void)setValue
:(id
)value forMeta
:(NSString
*)VLCMetaInformation
;
244 * Tracks information NSDictionary Possible Keys
248 * \returns a NSNumber
250 extern NSString
*VLCMediaTracksInformationCodec
;
253 * \returns a NSNumber
255 extern NSString
*VLCMediaTracksInformationId
;
257 * \returns a NSString
258 * \see VLCMediaTracksInformationTypeAudio
259 * \see VLCMediaTracksInformationTypeVideo
260 * \see VLCMediaTracksInformationTypeText
261 * \see VLCMediaTracksInformationTypeUnknown
263 extern NSString
*VLCMediaTracksInformationType
;
266 * \returns a NSNumber
268 extern NSString
*VLCMediaTracksInformationCodecProfile
;
270 * \returns a NSNumber
272 extern NSString
*VLCMediaTracksInformationCodecLevel
;
275 * \returns the audio channels number as NSNumber
277 extern NSString
*VLCMediaTracksInformationAudioChannelsNumber
;
279 * \returns the audio rate as NSNumber
281 extern NSString
*VLCMediaTracksInformationAudioRate
;
284 * \returns the height as NSNumber
286 extern NSString
*VLCMediaTracksInformationVideoHeight
;
288 * \returns the width as NSNumber
290 extern NSString
*VLCMediaTracksInformationVideoWidth
;
293 * Tracks information NSDictionary values for
294 * VLCMediaTracksInformationType
296 extern NSString
*VLCMediaTracksInformationTypeAudio
;
297 extern NSString
*VLCMediaTracksInformationTypeVideo
;
298 extern NSString
*VLCMediaTracksInformationTypeText
;
299 extern NSString
*VLCMediaTracksInformationTypeUnknown
;
303 * Returns the tracks information.
305 * This is an array of NSDictionary representing each track.
306 * It can contains the following keys:
308 * \see VLCMediaTracksInformationCodec
309 * \see VLCMediaTracksInformationId
310 * \see VLCMediaTracksInformationType
312 * \see VLCMediaTracksInformationCodecProfile
313 * \see VLCMediaTracksInformationCodecLevel
315 * \see VLCMediaTracksInformationAudioChannelsNumber
316 * \see VLCMediaTracksInformationAudioRate
318 * \see VLCMediaTracksInformationVideoHeight
319 * \see VLCMediaTracksInformationVideoWidth
322 - (NSArray
*)tracksInformation
;
325 * Start asynchronously to parse the media.
326 * This will attempt to fetch the meta data and tracks information.
328 * This is automatically done when an accessor requiring parsing
331 * \see -[VLCMediaDelegate mediaDidFinishParsing:]