12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System;
- using System.Collections.Generic;
- using System.Collections.Specialized;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using MatrixIO.IO.MpegTs;
- namespace TsViewer
- {
- public abstract class TsSource : INotifyPropertyChanged
- {
- private readonly TsDemuxer _demuxer = new TsDemuxer();
- public TsDemuxer Demuxer
- {
- get { return _demuxer; }
- }
- private Uri _uri;
- public Uri Uri
- {
- get
- {
- return _uri;
- }
- protected set
- {
- _uri = value;
- OnPropertyChanged("Uri");
- }
- }
-
- public abstract void Start(Uri uri);
- public abstract void Stop();
- public static TsSource Create(string uri)
- {
- return Create(new Uri(uri));
- }
- public static TsSource Create(Uri uri)
- {
- switch(uri.Scheme)
- {
- case "file":
- return Create<TsFileSource>(uri);
- case "udp":
- return Create<TsUdpSource>(uri);
- default:
- throw new ArgumentException("Unsupported scheme '" + uri.Scheme + "'");
- }
- }
- public static T Create<T>(string uri) where T: TsSource, new()
- {
- return Create<T>(new Uri(uri));
- }
- public static T Create<T>(Uri uri) where T: TsSource, new()
- {
- var newT = new T();
- newT.Start(uri);
- return newT;
- }
- public override string ToString()
- {
- return Uri == null ? "No Uri" : Uri.ToString();
- }
- public event PropertyChangedEventHandler PropertyChanged;
- private void OnPropertyChanged(string propertyName)
- {
- if(PropertyChanged != null)
- PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- }
|