/// <summary> /// Gets the stream parameters. /// </summary> /// <param name="clientSessionId">The client session id(unused at present).</param> /// <param name="clientAddr">The client address.</param> /// <param name="clientRtpPort">The client RTP port.</param> /// <param name="clientRtcpPort">The client RTCP port.</param> /// <param name="serverRtpPort">The server RTP port.</param> /// <param name="serverRtcpPort">The server RTCP port.</param> /// <param name="streamToken">The stream token.</param> /// <returns>Succeeded or failed.</returns> public bool GetStreamParameters(int clientSessionId, string clientAddr, int clientRtpPort, int clientRtcpPort, int serverRtpPort, int serverRtcpPort, ref StreamState streamToken) { // Creates a new media source: MediaSource inputSource = CreateStreamSource(); if (inputSource == null) { return(false); } // Creates rtp socket and rtcp socket for the client: ClientSocketBase clientRtpSocket = null; ClientSocketBase clientRtcpSocket = null; Socket socket = null; socket = Utils.CreateUdpSocket(serverRtpPort); if (socket == null) { return(false); } IPEndPoint iep = new IPEndPoint(IPAddress.Parse(clientAddr), clientRtpPort); clientRtpSocket = new ClientSocketUdp(socket, (EndPoint)iep); socket = Utils.CreateUdpSocket(serverRtcpPort); if (socket != null) { iep = new IPEndPoint(IPAddress.Parse(clientAddr), clientRtcpPort); clientRtcpSocket = new ClientSocketUdp(socket, (EndPoint)iep); } // Creates a sink for this stream: RtpSink rtpSink = CreateRtpSink(inputSource, clientRtpSocket); if (rtpSink == null) { return(false); } // Setups the state of the stream. The stream will get started later: streamToken = new StreamState(rtpSink, inputSource, clientRtcpSocket); if (streamToken == null) { return(false); } return(true); }
/// <summary> /// Creates the RTP sink. /// </summary> /// <param name="inputSource">The input source.</param> /// <param name="clientRtpSocket">The client RTP socket.</param> /// <returns>The RtpSink object.</returns> public override RtpSink CreateRtpSink(MediaSource inputSource, ClientSocketBase clientRtpSocket) { int payloadType = 33; // MP2T video codec, defined in RFC 2250. RtpSink rtpSink = new RtpSink(payloadType, inputSource, clientRtpSocket); if (rtpSink == null) { // Error Utils.OutputMessage(false, MsgLevel.Error, "MPEG2TransportFileServerMediaSession -- CreateRtpSink", "Could not create an instance of RtpSink!"); } return(rtpSink); }
/// <summary> /// Initializes a new instance of the <see cref="StreamState"/> class. /// </summary> /// <param name="rtpSink">The RTP sink.</param> /// <param name="inputSource">The input source.</param> /// <param name="clientRtcpSocket">The client RTCP socket.</param> public StreamState(RtpSink rtpSink, MediaSource inputSource, ClientSocketBase clientRtcpSocket) { this.rtpSink = rtpSink; this.mediaSource = inputSource; this.clientRtcpSocket = clientRtcpSocket; }