public async Task <ActionResult> OnPlaybackStart( [FromRoute] Guid userId, [FromRoute] Guid itemId, [FromQuery] string?mediaSourceId, [FromQuery] int?audioStreamIndex, [FromQuery] int?subtitleStreamIndex, [FromQuery] PlayMethod playMethod, [FromQuery] string?liveStreamId, [FromQuery] string playSessionId, [FromQuery] bool canSeek = false) { var playbackStartInfo = new PlaybackStartInfo { CanSeek = canSeek, ItemId = itemId, MediaSourceId = mediaSourceId, AudioStreamIndex = audioStreamIndex, SubtitleStreamIndex = subtitleStreamIndex, PlayMethod = playMethod, PlaySessionId = playSessionId, LiveStreamId = liveStreamId }; playbackStartInfo.PlayMethod = ValidatePlayMethod(playbackStartInfo.PlayMethod, playbackStartInfo.PlaySessionId); playbackStartInfo.SessionId = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id; await _sessionManager.OnPlaybackStart(playbackStartInfo).ConfigureAwait(false); return(NoContent()); }
public void SetMascot(Mascot Mascot) { Menu.Items.Clear(); foreach (Voice v in Mascot.Voices) { MenuItem mi = new MenuItem() { Header = v.Message }; mi.Click += (sender, e) => { PlayMethod?.Invoke(v); }; Menu.Items.Add(mi); } Menu.Items.Add(new Separator()); Menu.Items.Add(FollowItem); Menu.Items.Add(WalkItem); Menu.Items.Add(StayItem); Menu.Items.Add(new Separator()); Menu.Items.Add(LockMascotItem); Menu.Items.Add(CloseWindowItem); }
private PlayMethod ValidatePlayMethod(PlayMethod method, string playSessionId) { if (method == PlayMethod.Transcode) { var job = string.IsNullOrWhiteSpace(playSessionId) ? null : _transcodingJobHelper.GetTranscodingJob(playSessionId); if (job == null) { return(PlayMethod.DirectPlay); } } return(method); }
private PlayMethod ValidatePlayMethod(PlayMethod method, string playSessionId) { if (method == PlayMethod.Transcode) { var job = string.IsNullOrWhiteSpace(playSessionId) ? null : ApiEntryPoint.Instance.GetTranscodingJob(playSessionId); if (job == null) { return PlayMethod.DirectPlay; } } return method; }
public FormMain() { InitializeComponent(); // 起動後即座に初期化処理でnewされるけど初期化処理前に使用されるケースが残っているためここでインスタンスを作っておく musicList = new MusicList(); // 初期化処理 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Log.setting = setting = new Setting(); musicController = new MusicController(); comparison = CompareFileName; playMethod = PlaySelected; MachineLocked += FormMain_MachineLocked; }
private bool IsEligibleForDirectPlay(MediaSourceInfo item, int?maxBitrate, MediaStream subtitleStream, VideoOptions options, PlayMethod playMethod) { if (subtitleStream != null) { SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, playMethod); if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed) { _logger.Info("Not eligible for {0} due to unsupported subtitles", playMethod); return(false); } } return(IsAudioEligibleForDirectPlay(item, maxBitrate)); }
public async Task <ActionResult> OnPlaybackProgress( [FromRoute] Guid userId, [FromRoute] Guid itemId, [FromQuery] string?mediaSourceId, [FromQuery] long?positionTicks, [FromQuery] int?audioStreamIndex, [FromQuery] int?subtitleStreamIndex, [FromQuery] int?volumeLevel, [FromQuery] PlayMethod playMethod, [FromQuery] string?liveStreamId, [FromQuery] string playSessionId, [FromQuery] RepeatMode repeatMode, [FromQuery] bool isPaused = false, [FromQuery] bool isMuted = false) { var playbackProgressInfo = new PlaybackProgressInfo { ItemId = itemId, PositionTicks = positionTicks, IsMuted = isMuted, IsPaused = isPaused, MediaSourceId = mediaSourceId, AudioStreamIndex = audioStreamIndex, SubtitleStreamIndex = subtitleStreamIndex, VolumeLevel = volumeLevel, PlayMethod = playMethod, PlaySessionId = playSessionId, LiveStreamId = liveStreamId, RepeatMode = repeatMode }; playbackProgressInfo.PlayMethod = ValidatePlayMethod(playbackProgressInfo.PlayMethod, playbackProgressInfo.PlaySessionId); playbackProgressInfo.SessionId = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id; await _sessionManager.OnPlaybackProgress(playbackProgressInfo).ConfigureAwait(false); return(NoContent()); }
private void SetFinishAction(FinishAction finishAction) { finishActionStopToolStripMenuItem.Checked = finishActionReplayToolStripMenuItem.Checked = finishActionNextToolStripMenuItem.Checked = finishActionPreviousToolStripMenuItem.Checked = finishActionRandomToolStripMenuItem.Checked = false; switch (finishAction) { case FinishAction.Replay: playMethod = PlaySelected; finishActionReplayToolStripMenuItem.Checked = true; break; case FinishAction.Next: playMethod = PlayNext; finishActionNextToolStripMenuItem.Checked = true; break; case FinishAction.Previous: playMethod = PlayPrevious; finishActionPreviousToolStripMenuItem.Checked = true; break; case FinishAction.Random: playMethod = PlayRandom; finishActionRandomToolStripMenuItem.Checked = true; break; default: playMethod = PlayStop; finishActionStopToolStripMenuItem.Checked = true; break; } setting.FinishAction = finishAction; }
private static SubtitleProfile GetExternalSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, bool allowConversion) { foreach (SubtitleProfile profile in subtitleProfiles) { if (profile.Method != SubtitleDeliveryMethod.External && profile.Method != SubtitleDeliveryMethod.Hls) { continue; } if (profile.Method == SubtitleDeliveryMethod.Hls && playMethod != PlayMethod.Transcode) { continue; } if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if ((profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) || (profile.Method == SubtitleDeliveryMethod.Hls && subtitleStream.IsTextSubtitleStream)) { bool requiresConversion = !StringHelper.EqualsIgnoreCase(subtitleStream.Codec, profile.Format); if (!requiresConversion) { return(profile); } if (!allowConversion) { continue; } if (subtitleStream.IsTextSubtitleStream && subtitleStream.SupportsExternalStream && subtitleStream.SupportsSubtitleConversionTo(profile.Format)) { return(profile); } } } return(null); }
public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod) { if (playMethod != PlayMethod.Transcode && !subtitleStream.IsExternal) { // Look for supported embedded subs foreach (SubtitleProfile profile in subtitleProfiles) { if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method != SubtitleDeliveryMethod.Embed) { continue; } if (subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format) && StringHelper.EqualsIgnoreCase(profile.Format, subtitleStream.Codec)) { return(profile); } } } // Look for an external or hls profile that matches the stream type (text/graphical) and doesn't require conversion return(GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, false) ?? GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, true) ?? new SubtitleProfile { Method = SubtitleDeliveryMethod.Encode, Format = subtitleStream.Codec }); }
public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, EncodingContext context, PlayMethod playMethod) { if (playMethod != PlayMethod.Transcode) { // Look for supported embedded subs foreach (SubtitleProfile profile in subtitleProfiles) { if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method != SubtitleDeliveryMethod.Embed) { continue; } if (subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format) && StringHelper.EqualsIgnoreCase(profile.Format, subtitleStream.Codec)) { return(profile); } } } // Look for an external profile that matches the stream type (text/graphical) foreach (SubtitleProfile profile in subtitleProfiles) { bool requiresConversion = !StringHelper.EqualsIgnoreCase(subtitleStream.Codec, profile.Format); if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) { if (!requiresConversion) { return(profile); } if (subtitleStream.SupportsExternalStream) { return(profile); } // For sync we can handle the longer extraction times if (context == EncodingContext.Static && subtitleStream.IsTextSubtitleStream) { return(profile); } } } return(new SubtitleProfile { Method = SubtitleDeliveryMethod.Encode, Format = subtitleStream.Codec }); }
public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, EncodingContext context, PlayMethod playMethod) { if (playMethod != PlayMethod.Transcode) { // Look for supported embedded subs foreach (SubtitleProfile profile in subtitleProfiles) { if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method != SubtitleDeliveryMethod.Embed) { continue; } if (subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format) && StringHelper.EqualsIgnoreCase(profile.Format, subtitleStream.Codec)) { return profile; } } } // Look for an external profile that matches the stream type (text/graphical) foreach (SubtitleProfile profile in subtitleProfiles) { bool requiresConversion = !StringHelper.EqualsIgnoreCase(subtitleStream.Codec, profile.Format); if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) { if (!requiresConversion) { return profile; } if (subtitleStream.SupportsExternalStream) { return profile; } // For sync we can handle the longer extraction times if (context == EncodingContext.Static && subtitleStream.IsTextSubtitleStream) { return profile; } } } return new SubtitleProfile { Method = SubtitleDeliveryMethod.Encode, Format = subtitleStream.Codec }; }
private bool IsEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate, MediaStream subtitleStream, VideoOptions options, PlayMethod playMethod) { if (subtitleStream != null) { SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, options.Context, playMethod); if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed) { _logger.Debug("Not eligible for {0} due to unsupported subtitles", playMethod); return false; } } return IsAudioEligibleForDirectPlay(item, maxBitrate); }
public ExtensionRule(string extension, PlayMethod playMethod) { Extension = extension; PlayMethod = playMethod; }
private static SubtitleProfile GetExternalSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod, bool allowConversion) { foreach (SubtitleProfile profile in subtitleProfiles) { if (profile.Method != SubtitleDeliveryMethod.External && profile.Method != SubtitleDeliveryMethod.Hls) { continue; } if (profile.Method == SubtitleDeliveryMethod.Hls && playMethod != PlayMethod.Transcode) { continue; } if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if ((profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) || (profile.Method == SubtitleDeliveryMethod.Hls && subtitleStream.IsTextSubtitleStream)) { bool requiresConversion = !StringHelper.EqualsIgnoreCase(subtitleStream.Codec, profile.Format); if (!requiresConversion) { return profile; } if (!allowConversion) { continue; } if (subtitleStream.IsTextSubtitleStream && subtitleStream.SupportsExternalStream && subtitleStream.SupportsSubtitleConversionTo(profile.Format)) { return profile; } } } return null; }
public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, PlayMethod playMethod) { if (playMethod != PlayMethod.Transcode && !subtitleStream.IsExternal) { // Look for supported embedded subs foreach (SubtitleProfile profile in subtitleProfiles) { if (!profile.SupportsLanguage(subtitleStream.Language)) { continue; } if (profile.Method != SubtitleDeliveryMethod.Embed) { continue; } if (subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format) && StringHelper.EqualsIgnoreCase(profile.Format, subtitleStream.Codec)) { return profile; } } } // Look for an external or hls profile that matches the stream type (text/graphical) and doesn't require conversion return GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, false) ?? GetExternalSubtitleProfile(subtitleStream, subtitleProfiles, playMethod, true) ?? new SubtitleProfile { Method = SubtitleDeliveryMethod.Encode, Format = subtitleStream.Codec }; }