Example #1
0
        /// <summary>
        /// Adds a source filter to the graph and sets the input.
        /// </summary>
        protected virtual void AddSourceFilter()
        {
            int hr = 0;
            var networkResourceAccessor = _resourceAccessor as INetworkResourceAccessor;

            if (networkResourceAccessor != null)
            {
                ServiceRegistration.Get <ILogger>().Debug("{0}: Initializing for network media item '{1}'", PlayerTitle, networkResourceAccessor.URL);

                // try to render the url and let DirectShow choose the source filter
                hr = _graphBuilder.RenderFile(networkResourceAccessor.URL, null);
                new HRESULT(hr).Throw();

                return;
            }

            var fileSystemResourceAccessor = _resourceAccessor as IFileSystemResourceAccessor;

            if (fileSystemResourceAccessor != null)
            {
                ServiceRegistration.Get <ILogger>().Debug("{0}: Initializing for file system media item '{1}'", PlayerTitle, fileSystemResourceAccessor.Path);

                // For locally accessible files prefer the default filters
                ILocalFsResourceAccessor lfsra = fileSystemResourceAccessor as ILocalFsResourceAccessor;
                if (lfsra != null)
                {
                    // try to render the file and let DirectShow choose the source filter
                    hr = _graphBuilder.RenderFile(lfsra.LocalFileSystemPath, null);
                    new HRESULT(hr).Throw();
                    return;
                }

                // use the DotNetStreamSourceFilter as source filter
                _streamFilter   = new DotNetStreamSourceFilter();
                _resourceStream = fileSystemResourceAccessor.OpenRead();
                _streamFilter.SetSourceStream(_resourceStream, fileSystemResourceAccessor.ResourcePathName);
                hr = _graphBuilder.AddFilter(_streamFilter, _streamFilter.Name);
                new HRESULT(hr).Throw();

                using (DSFilter source2 = new DSFilter(_streamFilter))
                    hr = source2.OutputPin.Render();
                new HRESULT(hr).Throw();

                return;
            }

            throw new IllegalCallException("The VideoPlayer can only play resources of type INetworkResourceAccessor or IFileSystemResourceAccessor");
        }
Example #2
0
    /// <summary>
    /// Adds a source filter to the graph and sets the input.
    /// </summary>
    protected virtual void AddSourceFilter()
    {
      var networkResourceAccessor = _resourceAccessor as INetworkResourceAccessor;
      if (networkResourceAccessor != null)
      {
        ServiceRegistration.Get<ILogger>().Debug("{0}: Initializing for network media item '{1}'", PlayerTitle, networkResourceAccessor.URL);

        // try to render the url and let DirectShow choose the source filter
        int hr = _graphBuilder.RenderFile(networkResourceAccessor.URL, null);
        new HRESULT(hr).Throw();

        return;
      }

      var fileSystemResourceAccessor = _resourceAccessor as IFileSystemResourceAccessor;
      if (fileSystemResourceAccessor != null)
      {
        ServiceRegistration.Get<ILogger>().Debug("{0}: Initializing for file system media item '{1}'", PlayerTitle, fileSystemResourceAccessor.Path);

        // use the DotNetStreamSourceFilter as source filter
        var sourceFilter = new DotNetStreamSourceFilter();
        _resourceStream = fileSystemResourceAccessor.OpenRead();
        sourceFilter.SetSourceStream(_resourceStream, fileSystemResourceAccessor.ResourcePathName);
        int hr = _graphBuilder.AddFilter(sourceFilter, sourceFilter.Name);
        new HRESULT(hr).Throw();
        using(DSFilter source2 = new DSFilter(sourceFilter))
          hr = source2.OutputPin.Render();
        new HRESULT(hr).Throw();

        return;
      }

      throw new IllegalCallException("The VideoPlayer can only play resources of type INetworkResourceAccessor or IFileSystemResourceAccessor");
    }