99
1010namespace SharpRTSPServer
1111{
12- public enum ProxyTrackType : int
13- {
14- Video = 0 ,
15- Audio = 1
16- }
17-
18- public class ProxyTrack : TrackBase
12+ public class ProxyTrack : TrackBase , IDisposable
1913 {
2014 public override string Codec => "PROXY" ;
2115
2216 public override int ID { get ; set ; }
2317 public override int PayloadType { get ; set ; }
2418
2519 private bool _isReady = false ;
20+ private bool _disposedValue ;
21+
2622 public override bool IsReady
2723 {
2824 get
@@ -33,7 +29,7 @@ public override bool IsReady
3329
3430 public Uri Uri { get ; }
3531
36- public ProxyTrack ( ProxyTrackType type , string uri )
32+ public ProxyTrack ( TrackType type , string uri )
3733 {
3834 this . ID = ( int ) type ;
3935 this . Uri = new Uri ( uri , UriKind . Absolute ) ;
@@ -59,25 +55,53 @@ private async void Connect(Uri uri)
5955 {
6056 await Task . Run ( ( ) =>
6157 {
62- UdpClient udpClient = new UdpClient ( uri . Port ) ;
63- IPEndPoint remoteEndPoint = new IPEndPoint ( IPAddress . Parse ( uri . Host ) , 0 ) ;
64- _isReady = true ;
65-
66- while ( true )
58+ try
6759 {
68- try
60+ using ( UdpClient udpClient = new UdpClient ( uri . Port ) )
6961 {
70- byte [ ] rtp = udpClient . Receive ( ref remoteEndPoint ) ;
71- uint rtpTimestamp = RTPPacketUtil . ReadRtpTimestamp ( rtp ) ;
72- Sink . FeedInRawRTP ( ID , rtpTimestamp , new List < Memory < byte > > ( ) { rtp } ) ;
73- //Debug.WriteLine($"This message was sent from {remoteEndPoint.Address} on their port number {remoteEndPoint.Port}");
74- }
75- catch ( Exception e )
76- {
77- Debug . WriteLine ( e . ToString ( ) ) ;
62+ IPEndPoint remoteEndPoint = new IPEndPoint ( IPAddress . Parse ( uri . Host ) , 0 ) ;
63+ _isReady = true ;
64+
65+ while ( _isReady )
66+ {
67+ try
68+ {
69+ byte [ ] rtp = udpClient . Receive ( ref remoteEndPoint ) ;
70+ uint rtpTimestamp = RTPPacketUtil . ReadTS ( rtp ) ;
71+ Sink . FeedInRawRTP ( ID , rtpTimestamp , new List < Memory < byte > > ( ) { rtp } ) ;
72+ }
73+ catch ( Exception e )
74+ {
75+ Debug . WriteLine ( e . ToString ( ) ) ;
76+ }
77+ }
7878 }
7979 }
80+ catch ( Exception ee )
81+ {
82+ Debug . WriteLine ( ee . ToString ( ) ) ;
83+ _isReady = false ;
84+ }
8085 } ) ;
8186 }
87+
88+ protected virtual void Dispose ( bool disposing )
89+ {
90+ if ( ! _disposedValue )
91+ {
92+ if ( disposing )
93+ {
94+ _isReady = false ;
95+ }
96+
97+ _disposedValue = true ;
98+ }
99+ }
100+
101+ public void Dispose ( )
102+ {
103+ Dispose ( disposing : true ) ;
104+ GC . SuppressFinalize ( this ) ;
105+ }
82106 }
83107}
0 commit comments