/// <summary> /// Creates a MediaItem that represents a TV stream. The MediaItem also holds information about stream indices to provide PiP /// functions (<paramref name="slotIndex"/>). /// </summary> /// <param name="slotIndex">Index of the slot (0/1)</param> /// <param name="path">Path or URL of the stream</param> /// <param name="channel"></param> /// <returns></returns> public static LiveTvMediaItem CreateMediaItem(int slotIndex, string path, IChannel channel) { if (!String.IsNullOrEmpty(path)) { ISystemResolver systemResolver = ServiceRegistration.Get<ISystemResolver>(); IDictionary<Guid, MediaItemAspect> aspects = new Dictionary<Guid, MediaItemAspect>(); MediaItemAspect providerResourceAspect; MediaItemAspect mediaAspect; SlimTvResourceAccessor resourceAccessor = new SlimTvResourceAccessor(slotIndex, path); aspects[ProviderResourceAspect.ASPECT_ID] = providerResourceAspect = new MediaItemAspect(ProviderResourceAspect.Metadata); aspects[MediaAspect.ASPECT_ID] = mediaAspect = new MediaItemAspect(MediaAspect.Metadata); // VideoAspect needs to be included to associate VideoPlayer later! aspects[VideoAspect.ASPECT_ID] = new MediaItemAspect(VideoAspect.Metadata); providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, systemResolver.LocalSystemId); String raPath = resourceAccessor.CanonicalLocalResourcePath.Serialize(); providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, raPath); mediaAspect.SetAttribute(MediaAspect.ATTR_TITLE, "Live TV"); mediaAspect.SetAttribute(MediaAspect.ATTR_MIME_TYPE, "video/livetv"); // Custom mimetype for LiveTv LiveTvMediaItem tvStream = new LiveTvMediaItem(new Guid(), aspects); tvStream.AdditionalProperties[LiveTvMediaItem.SLOT_INDEX] = slotIndex; tvStream.AdditionalProperties[LiveTvMediaItem.CHANNEL] = channel; tvStream.AdditionalProperties[LiveTvMediaItem.TUNING_TIME] = DateTime.Now; return tvStream; } return null; }
/// <summary> /// Creates a MediaItem that represents a TV stream. The MediaItem also holds information about stream indices to provide PiP /// functions (<paramref name="slotIndex"/>). /// </summary> /// <param name="slotIndex">Index of the slot (0/1)</param> /// <param name="path">Path or URL of the stream</param> /// <param name="channel"></param> /// <returns></returns> public static LiveTvMediaItem CreateMediaItem(int slotIndex, string path, IChannel channel) { if (!String.IsNullOrEmpty(path)) { ISystemResolver systemResolver = ServiceRegistration.Get <ISystemResolver>(); IDictionary <Guid, MediaItemAspect> aspects = new Dictionary <Guid, MediaItemAspect>(); MediaItemAspect providerResourceAspect; MediaItemAspect mediaAspect; SlimTvResourceAccessor resourceAccessor = new SlimTvResourceAccessor(slotIndex, path); aspects[ProviderResourceAspect.ASPECT_ID] = providerResourceAspect = new MediaItemAspect(ProviderResourceAspect.Metadata); aspects[MediaAspect.ASPECT_ID] = mediaAspect = new MediaItemAspect(MediaAspect.Metadata); // VideoAspect needs to be included to associate VideoPlayer later! aspects[VideoAspect.ASPECT_ID] = new MediaItemAspect(VideoAspect.Metadata); providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, systemResolver.LocalSystemId); String raPath = resourceAccessor.CanonicalLocalResourcePath.Serialize(); providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, raPath); mediaAspect.SetAttribute(MediaAspect.ATTR_TITLE, "Live TV"); mediaAspect.SetAttribute(MediaAspect.ATTR_MIME_TYPE, "video/livetv"); // Custom mimetype for LiveTv LiveTvMediaItem tvStream = new LiveTvMediaItem(new Guid(), aspects); tvStream.AdditionalProperties[LiveTvMediaItem.SLOT_INDEX] = slotIndex; tvStream.AdditionalProperties[LiveTvMediaItem.CHANNEL] = channel; tvStream.AdditionalProperties[LiveTvMediaItem.TUNING_TIME] = DateTime.Now; return(tvStream); } return(null); }