/// <summary> /// Adds the file source filter to the graph. /// </summary> protected override void AddFileSource() { // Render the file _fileSource = FilterLoader.LoadFilterFromDll("TsReader.ax", typeof(TsReader).GUID, true); ITsReader tsReader = (ITsReader)_fileSource; tsReader.SetRelaxedMode(1); tsReader.SetTsReaderCallback(this); tsReader.SetRequestAudioChangeCallback(this); _graphBuilder.AddFilter(_fileSource, TSREADER_FILTER_NAME); _subtitleRenderer = new SubtitleRenderer(OnTextureInvalidated); _subtitleFilter = _subtitleRenderer.AddSubtitleFilter(_graphBuilder); if (_subtitleFilter != null) { _subtitleRenderer.RenderSubtitles = true; _subtitleRenderer.SetPlayer(this); } IFileSourceFilter f = (IFileSourceFilter)_fileSource; f.Load(SourcePathOrUrl, null); // Init GraphRebuilder _graphRebuilder = new GraphRebuilder(_graphBuilder, _fileSource, OnAfterGraphRebuild) { PlayerName = PlayerTitle }; }
/// <summary> /// Adds the file source filter to the graph. /// </summary> protected override void AddFileSource() { // Render the file _fileSource = (IBaseFilter) new TsReader(); ITsReader tsReader = (ITsReader)_fileSource; tsReader.SetRelaxedMode(1); tsReader.SetTsReaderCallback(this); tsReader.SetRequestAudioChangeCallback(this); _graphBuilder.AddFilter(_fileSource, TSREADER_FILTER_NAME); _subtitleRenderer = new SubtitleRenderer(OnTextureInvalidated); _subtitleFilter = _subtitleRenderer.AddSubtitleFilter(_graphBuilder); if (_subtitleFilter != null) { _subtitleRenderer.RenderSubtitles = true; _subtitleRenderer.SetPlayer(this); } IFileSourceFilter f = (IFileSourceFilter)_fileSource; f.Load(_resourceAccessor.LocalFileSystemPath, null); // Init GraphRebuilder _graphRebuilder = new GraphRebuilder(_graphBuilder, _fileSource, OnAfterGraphRebuild) { PlayerName = PlayerTitle }; }
/// <summary> /// Adds the TsReader filter to the graph. /// </summary> protected override void AddSourceFilter() { // Render the file _sourceFilter = FilterLoader.LoadFilterFromDll("TsReader.ax", typeof(TsReader).GUID, true); IFileSourceFilter fileSourceFilter = (IFileSourceFilter)_sourceFilter; ITsReader tsReader = (ITsReader)_sourceFilter; tsReader.SetRelaxedMode(1); tsReader.SetTsReaderCallback(this); tsReader.SetRequestAudioChangeCallback(this); _graphBuilder.AddFilter(_sourceFilter, TSREADER_FILTER_NAME); _subtitleRenderer = new SubtitleRenderer(OnTextureInvalidated); _subtitleFilter = _subtitleRenderer.AddSubtitleFilter(_graphBuilder); if (_subtitleFilter != null) { _subtitleRenderer.RenderSubtitles = true; _subtitleRenderer.SetPlayer(this); } if (_resourceLocator.NativeResourcePath.IsNetworkResource) { // _resourceAccessor points to an rtsp:// stream or network file var sourcePathOrUrl = SourcePathOrUrl; if (sourcePathOrUrl == null) { throw new IllegalCallException("The TsVideoPlayer can only play network resources of type INetworkResourceAccessor"); } ServiceRegistration.Get <ILogger>().Debug("{0}: Initializing for stream '{1}'", PlayerTitle, sourcePathOrUrl); int hr = fileSourceFilter.Load(SourcePathOrUrl, null); new HRESULT(hr).Throw(); } else { // _resourceAccessor points to a local or remote mapped .ts file _localFsRaHelper = new LocalFsResourceAccessorHelper(_resourceAccessor); var localFileSystemResourceAccessor = _localFsRaHelper.LocalFsResourceAccessor; if (localFileSystemResourceAccessor == null) { throw new IllegalCallException("The TsVideoPlayer can only play file resources of type ILocalFsResourceAccessor"); } ServiceRegistration.Get <ILogger>().Debug("{0}: Initializing for stream '{1}'", PlayerTitle, localFileSystemResourceAccessor.LocalFileSystemPath); int hr = fileSourceFilter.Load(localFileSystemResourceAccessor.LocalFileSystemPath, null); new HRESULT(hr).Throw(); } // Init GraphRebuilder _graphRebuilder = new GraphRebuilder(_graphBuilder, _sourceFilter, OnAfterGraphRebuild) { PlayerName = PlayerTitle }; }
/// <summary> /// Adds the file source filter to the graph. /// </summary> protected override void AddSourceFilter() { if (!IsLocalFilesystemResource) { throw new IllegalCallException("The BluRayPlayer can only play local file system resources"); } // Load source filter, assembly location must be determined here, otherwise LoadFilterFromDll would try to lookup the file relative to VideoPlayer! string filterPath = FilterLoader.BuildAssemblyRelativePath("BDReader.ax"); _fileSource = FilterLoader.LoadFilterFromDll(filterPath, typeof(BDReader).GUID); var baseFilter = _fileSource.GetFilter(); // Init BD Reader _bdReader = (IBDReader)baseFilter; LoadSettings(); _bdReader.SetD3DDevice(_device.NativePointer); _bdReader.SetBDReaderCallback(this); _graphBuilder.AddFilter(baseFilter, BluRayAPI.BDREADER_FILTER_NAME); _subtitleRenderer = new SubtitleRenderer(OnTextureInvalidated); _subtitleFilter = _subtitleRenderer.AddSubtitleFilter(_graphBuilder); if (_subtitleFilter != null) { _subtitleRenderer.RenderSubtitles = true; _subtitleRenderer.SetPlayer(this); } // Prepare event handling _eventThread = new Thread(HandleBDEvent); _eventThread.Start(); // Render the file IFileSourceFilter f = (IFileSourceFilter)_fileSource; using (((ILocalFsResourceAccessor)_resourceAccessor).EnsureLocalFileSystemAccess()) { string strFile = Path.Combine(((ILocalFsResourceAccessor)_resourceAccessor).LocalFileSystemPath, @"BDMV\index.bdmv"); f.Load(strFile, null); // Init GraphRebuilder _graphRebuilder = new GraphRebuilder(_graphBuilder, baseFilter, OnAfterGraphRebuild) { PlayerName = PlayerTitle }; // Get the complete BD title information (including all streams, chapters...) _titleInfos = GetTitleInfoCollection(_bdReader); ulong duration = 0; uint maxIdx = 0; foreach (BluRayAPI.BDTitleInfo bdTitleInfo in _titleInfos) { if (bdTitleInfo.Duration > duration) { duration = bdTitleInfo.Duration; maxIdx = bdTitleInfo.Index; } } // TEST: play the longest title _forceTitle = false; if (_forceTitle) { _bdReader.ForceTitleBasedPlayback(true, maxIdx); _currentTitle = (int)maxIdx; } else { _bdReader.ForceTitleBasedPlayback(false, 0); } _bdReader.Start(); SetVideoDecoder(); } }