123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System;
- using System.Diagnostics;
- using System.Net;
- using System.Net.Sockets;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Ink;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using MatrixIO.IO.MpegTs;
- namespace SLTest
- {
- public class TsUdpMediaStreamSource : MediaStreamSource
- {
- public Uri Url { get; private set; }
- private readonly UdpAnySourceMulticastClient _udpClient;
- public TsDemuxer Demuxer { get; private set; }
- public TsUdpMediaStreamSource(Uri url)
- {
- Url = url;
- Demuxer = new TsDemuxer();
- Debug.WriteLine("Creating UDP Client...");
- _udpClient = new UdpAnySourceMulticastClient(IPAddress.Parse(url.Host), url.Port);
- Debug.WriteLine("Joining Multicast Group...");
- _udpClient.BeginJoinGroup(JoinedGroup, null);
- }
- private void JoinedGroup(IAsyncResult ar)
- {
- Debug.WriteLine("Ending Multicast Group Join...");
- _udpClient.EndJoinGroup(ar);
- _udpClient.ReceiveBufferSize = 128 * 1024;
- Debug.WriteLine("Beginning Receive...");
- var packetBuffer = new byte[9000];
- _udpClient.BeginReceiveFromGroup(packetBuffer, 0, packetBuffer.Length, ReceivedPacket, packetBuffer);
- }
- private void ReceivedPacket(IAsyncResult ar)
- {
- //Debug.WriteLine("Receiving Packet...");
- var packetBuffer = ar.AsyncState as byte[];
- try
- {
- IPEndPoint source;
- var length = _udpClient.EndReceiveFromGroup(ar, out source);
- //Debug.WriteLine("Received " + length + " byte packet from " + source);
- Demuxer.ProcessInput(packetBuffer, 0, length);
- }
- catch(SocketException e)
- {
- Debug.WriteLine("SocketException: " + e.SocketErrorCode);
- }
- catch(Exception e)
- {
- var ex = e;
- while (ex != null)
- {
- Debug.WriteLine(ex.Message);
- Debug.WriteLine(ex.StackTrace);
- ex = ex.InnerException;
- }
- }
- if (packetBuffer != null)
- {
- _udpClient.BeginReceiveFromGroup(packetBuffer, 0, packetBuffer.Length, ReceivedPacket, packetBuffer);
- }
- }
- protected override void CloseMedia()
- {
- throw new NotImplementedException();
- }
- protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
- {
- throw new NotImplementedException();
- }
- protected override void GetSampleAsync(MediaStreamType mediaStreamType)
- {
- throw new NotImplementedException();
- }
- protected override void OpenMediaAsync()
- {
- throw new NotImplementedException();
- }
- protected override void SeekAsync(long seekToTime)
- {
- throw new NotImplementedException();
- }
- protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
- {
- throw new NotImplementedException();
- }
- }
- }
|