TsUdpMediaStreamSource.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Diagnostics;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Ink;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Animation;
  12. using System.Windows.Shapes;
  13. using MatrixIO.IO.MpegTs;
  14. namespace SLTest
  15. {
  16. public class TsUdpMediaStreamSource : MediaStreamSource
  17. {
  18. public Uri Url { get; private set; }
  19. private readonly UdpAnySourceMulticastClient _udpClient;
  20. public TsDemuxer Demuxer { get; private set; }
  21. public TsUdpMediaStreamSource(Uri url)
  22. {
  23. Url = url;
  24. Demuxer = new TsDemuxer();
  25. Debug.WriteLine("Creating UDP Client...");
  26. _udpClient = new UdpAnySourceMulticastClient(IPAddress.Parse(url.Host), url.Port);
  27. Debug.WriteLine("Joining Multicast Group...");
  28. _udpClient.BeginJoinGroup(JoinedGroup, null);
  29. }
  30. private void JoinedGroup(IAsyncResult ar)
  31. {
  32. Debug.WriteLine("Ending Multicast Group Join...");
  33. _udpClient.EndJoinGroup(ar);
  34. _udpClient.ReceiveBufferSize = 128 * 1024;
  35. Debug.WriteLine("Beginning Receive...");
  36. var packetBuffer = new byte[9000];
  37. _udpClient.BeginReceiveFromGroup(packetBuffer, 0, packetBuffer.Length, ReceivedPacket, packetBuffer);
  38. }
  39. private void ReceivedPacket(IAsyncResult ar)
  40. {
  41. //Debug.WriteLine("Receiving Packet...");
  42. var packetBuffer = ar.AsyncState as byte[];
  43. try
  44. {
  45. IPEndPoint source;
  46. var length = _udpClient.EndReceiveFromGroup(ar, out source);
  47. //Debug.WriteLine("Received " + length + " byte packet from " + source);
  48. Demuxer.ProcessInput(packetBuffer, 0, length);
  49. }
  50. catch(SocketException e)
  51. {
  52. Debug.WriteLine("SocketException: " + e.SocketErrorCode);
  53. }
  54. catch(Exception e)
  55. {
  56. var ex = e;
  57. while (ex != null)
  58. {
  59. Debug.WriteLine(ex.Message);
  60. Debug.WriteLine(ex.StackTrace);
  61. ex = ex.InnerException;
  62. }
  63. }
  64. if (packetBuffer != null)
  65. {
  66. _udpClient.BeginReceiveFromGroup(packetBuffer, 0, packetBuffer.Length, ReceivedPacket, packetBuffer);
  67. }
  68. }
  69. protected override void CloseMedia()
  70. {
  71. throw new NotImplementedException();
  72. }
  73. protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
  74. {
  75. throw new NotImplementedException();
  76. }
  77. protected override void GetSampleAsync(MediaStreamType mediaStreamType)
  78. {
  79. throw new NotImplementedException();
  80. }
  81. protected override void OpenMediaAsync()
  82. {
  83. throw new NotImplementedException();
  84. }
  85. protected override void SeekAsync(long seekToTime)
  86. {
  87. throw new NotImplementedException();
  88. }
  89. protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
  90. {
  91. throw new NotImplementedException();
  92. }
  93. }
  94. }