Пример #1
0
        /// <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
            };
        }
Пример #2
0
        /// <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
            };
        }
Пример #3
0
        /// <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
            };
        }
Пример #4
0
        /// <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();
            }
        }