VLCMedia.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /*****************************************************************************
  2. * VLCMedia.h: VLC.framework VLCMedia header
  3. *****************************************************************************
  4. * Copyright (C) 2007 Pierre d'Herbemont
  5. * Copyright (C) 2007 the VideoLAN team
  6. * $Id$
  7. *
  8. * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
  9. *
  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.
  14. *
  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.
  19. *
  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. *****************************************************************************/
  24. #import <Cocoa/Cocoa.h>
  25. #import "VLCMediaList.h"
  26. #import "VLCTime.h"
  27. /* Meta Dictionary Keys */
  28. /**
  29. * Standard dictionary keys for retreiving meta data.
  30. */
  31. extern NSString * VLCMetaInformationTitle; /* NSString */
  32. extern NSString * VLCMetaInformationArtist; /* NSString */
  33. extern NSString * VLCMetaInformationGenre; /* NSString */
  34. extern NSString * VLCMetaInformationCopyright; /* NSString */
  35. extern NSString * VLCMetaInformationAlbum; /* NSString */
  36. extern NSString * VLCMetaInformationTrackNumber; /* NSString */
  37. extern NSString * VLCMetaInformationDescription; /* NSString */
  38. extern NSString * VLCMetaInformationRating; /* NSString */
  39. extern NSString * VLCMetaInformationDate; /* NSString */
  40. extern NSString * VLCMetaInformationSetting; /* NSString */
  41. extern NSString * VLCMetaInformationURL; /* NSString */
  42. extern NSString * VLCMetaInformationLanguage; /* NSString */
  43. extern NSString * VLCMetaInformationNowPlaying; /* NSString */
  44. extern NSString * VLCMetaInformationPublisher; /* NSString */
  45. extern NSString * VLCMetaInformationEncodedBy; /* NSString */
  46. extern NSString * VLCMetaInformationArtworkURL; /* NSString */
  47. extern NSString * VLCMetaInformationArtwork; /* NSImage */
  48. extern NSString * VLCMetaInformationTrackID; /* NSString */
  49. /* Notification Messages */
  50. /**
  51. * Available notification messages.
  52. */
  53. extern NSString * VLCMediaMetaChanged; //< Notification message for when the media's meta data has changed
  54. // Forward declarations, supresses compiler error messages
  55. @class VLCMediaList;
  56. @class VLCMedia;
  57. typedef enum VLCMediaState
  58. {
  59. VLCMediaStateNothingSpecial, //< Nothing
  60. VLCMediaStateBuffering, //< Stream is buffering
  61. VLCMediaStatePlaying, //< Stream is playing
  62. VLCMediaStateError, //< Can't be played because an error occured
  63. } VLCMediaState;
  64. /**
  65. * Informal protocol declaration for VLCMedia delegates. Allows data changes to be
  66. * trapped.
  67. */
  68. @protocol VLCMediaDelegate
  69. // TODO: SubItemAdded/SubItemRemoved implementation. Not sure if we really want to implement this.
  70. ///**
  71. // * Delegate method called whenever a sub item has been added to the specified VLCMedia.
  72. // * \param aMedia The media resource that has received the new sub item.
  73. // * \param childMedia The new sub item added.
  74. // * \param index Location of the new subitem in the aMedia's sublist.
  75. // */
  76. // - (void)media:(VLCMedia *)media addedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
  77. ///**
  78. // * Delegate method called whenever a sub item has been removed from the specified VLCMedia.
  79. // * \param aMedia The media resource that has had a sub item removed from.
  80. // * \param childMedia The sub item removed.
  81. // * \param index The previous location of the recently removed sub item.
  82. // */
  83. // - (void)media:(VLCMedia *)aMedia removedSubItem:(VLCMedia *)childMedia atIndex:(int)index;
  84. /**
  85. * Delegate method called whenever the meta has changed for the receiver.
  86. * \param aMedia The media resource whose meta data has been changed.
  87. * \param oldValue The old meta data value.
  88. * \param key The key of the value that was changed.
  89. */
  90. - (void)media:(VLCMedia *)aMedia metaValueChangedFrom:(id)oldValue forKey:(NSString *)key;
  91. @end
  92. /**
  93. * Defines files and streams as a managed object. Each media object can be
  94. * administered seperately. VLCMediaPlayer or VLCMediaControl must be used
  95. * to execute the appropriate playback functions.
  96. * \see VLCMediaPlayer
  97. * \see VLCMediaControl
  98. */
  99. @interface VLCMedia : NSObject
  100. {
  101. void * p_md; //< Internal media descriptor instance
  102. NSURL * url; //< URL for this media resource
  103. VLCMediaList * subitems; //< Sub list of items
  104. VLCTime * length; //< Duration of the media
  105. NSMutableDictionary * metaDictionary; //< Meta data storage
  106. id delegate; //< Delegate object
  107. BOOL preparsed; //< Value used to determine of the file has been preparsed
  108. VLCMediaState state;
  109. }
  110. /* Object Factories */
  111. /**
  112. * Manufactures a new VLCMedia object using the URL specified.
  113. * \param anURL URL to media to be accessed.
  114. * \return A new VLCMedia object, only if there were no errors. This object
  115. * will be automatically released.
  116. * \see initWithMediaURL
  117. */
  118. + (id)mediaWithURL:(NSURL *)anURL;
  119. /**
  120. * Manufactures a new VLCMedia object using the path specified.
  121. * \param aPath Path to the media to be accessed.
  122. * \return A new VLCMedia object, only if there were no errors. This object
  123. * will be automatically released.
  124. * \see initWithPath
  125. */
  126. + (id)mediaWithPath:(NSString *)aPath;
  127. /**
  128. * TODO
  129. * \param aName TODO
  130. * \return a new VLCMedia object, only if there were no errors. This object
  131. * will be automatically released.
  132. * \see initAsNodeWithName
  133. */
  134. + (id)mediaAsNodeWithName:(NSString *)aName;
  135. /* Initializers */
  136. /**
  137. * Initializes a new VLCMedia object to use the specified URL.
  138. * \param aPath Path to media to be accessed.
  139. * \return A new VLCMedia object, only if there were no errors.
  140. */
  141. - (id)initWithURL:(NSURL *)anURL;
  142. /**
  143. * Initializes a new VLCMedia object to use the specified path.
  144. * \param aPath Path to media to be accessed.
  145. * \return A new VLCMedia object, only if there were no errors.
  146. */
  147. - (id)initWithPath:(NSString *)aPath;
  148. /**
  149. * TODO
  150. * \param aName TODO
  151. * \return A new VLCMedia object, only if there were no errors.
  152. */
  153. - (id)initAsNodeWithName:(NSString *)aName;
  154. /**
  155. * Returns an NSComparisonResult value that indicates the lexical ordering of
  156. * the receiver and a given meda.
  157. * \param media The media with which to compare with the receiver.
  158. * \return NSOrderedAscending if the URL of the receiver precedes media in
  159. * lexical ordering, NSOrderedSame if the URL of the receiver and media are
  160. * equivalent in lexical value, and NSOrderedDescending if the URL of the
  161. * receiver follows media. If media is nil, returns NSOrderedDescending.
  162. */
  163. - (NSComparisonResult)compare:(VLCMedia *)media;
  164. /* Properties */
  165. /**
  166. * Receiver's delegate.
  167. */
  168. @property (assign) id delegate;
  169. /**
  170. * A VLCTime object describing the length of the media resource, only if it is
  171. * available. Use lengthWaitUntilDate: to wait for a specified length of time.
  172. * \see lengthWaitUntilDate
  173. */
  174. @property (retain, readonly) VLCTime * length;
  175. /**
  176. * Returns a VLCTime object describing the length of the media resource,
  177. * however, this is a blocking operation and will wait until the preparsing is
  178. * completed before returning anything.
  179. * \param aDate Time for operation to wait until, if there are no results
  180. * before specified date then nil is returned.
  181. * \return The length of the media resource, nil if it couldn't wait for it.
  182. */
  183. - (VLCTime *)lengthWaitUntilDate:(NSDate *)aDate;
  184. /**
  185. * Determines if the media has already been preparsed.
  186. */
  187. @property (readonly) BOOL isPreparsed;
  188. /**
  189. * The URL for the receiver's media resource.
  190. */
  191. @property (retain, readonly) NSURL * url;
  192. /**
  193. * The receiver's sub list.
  194. */
  195. @property (retain, readonly) VLCMediaList * subitems;
  196. /**
  197. * The receiver's meta data as a NSDictionary object.
  198. */
  199. @property (retain, readonly) NSDictionary * metaDictionary;
  200. /**
  201. * The receiver's state, such as Playing, Error, NothingSpecial, Buffering.
  202. */
  203. @property (readonly) VLCMediaState state;
  204. @end