/// <summary> /// setup the initial buffers and write the basic stream data to the db /// </summary> /// <param name="participant">for this participant</param> /// <param name="stream">using this rtp stream</param> public StreamRecorder( int participantID, RtpStream stream, ConferenceRecorderPC conferencePerfCounter ) { this.rtpStream = stream; this.perfCounter = conferencePerfCounter; this.partID = participantID; // We do *not* re-use existing streams if a stream goes away and comes back. This decision was made // becuase it causes the client not to see the Rtcp data die & come back during playback, though it // did during recording. This inconsistency was viewed to cause problems, and was removed. InitStream(); buffers = new BufferRecorder[Constants.MaxBuffers]; bufferCount = Constants.InitialBuffers; for ( int i = 0; i < bufferCount; i++) { buffers[i] = new BufferRecorder( i, streamID ); buffers[i].Overflowed += new EventHandler(this.OnOverflowException); perfCounter.AddInstanceForCollection(buffers[i]); } curBufIndex = 0; currentBuffer = buffers[curBufIndex]; rtpStream.FrameReceived += new MSR.LST.Net.Rtp.RtpStream.FrameReceivedEventHandler(FrameReceived); }
/// <summary> /// setup the initial buffers and write the basic stream data to the db /// </summary> /// <param name="participant">for this participant</param> /// <param name="stream">using this rtp stream</param> public StreamRecorder(int participantID, RtpStream stream, ConferenceRecorderPC conferencePerfCounter) { this.rtpStream = stream; this.perfCounter = conferencePerfCounter; this.partID = participantID; // We do *not* re-use existing streams if a stream goes away and comes back. This decision was made // becuase it causes the client not to see the Rtcp data die & come back during playback, though it // did during recording. This inconsistency was viewed to cause problems, and was removed. InitStream(); buffers = new BufferRecorder[Constants.MaxBuffers]; bufferCount = Constants.InitialBuffers; for (int i = 0; i < bufferCount; i++) { buffers[i] = new BufferRecorder(i, streamID); buffers[i].Overflowed += new EventHandler(this.OnOverflowException); perfCounter.AddInstanceForCollection(buffers[i]); } curBufIndex = 0; currentBuffer = buffers[curBufIndex]; rtpStream.FrameReceived += new MSR.LST.Net.Rtp.RtpStream.FrameReceivedEventHandler(FrameReceived); }
/// <summary> /// Starts recording a conference. Sets up the conference data and then records all streams received until told to stop. /// </summary> public void RecordConference(string conferenceDescription, string venueIdentifier, IPEndPoint venue) { if (conferenceDescription.Length >= Constants.MaxDBStringSize || venueIdentifier.Length >= Constants.MaxDBStringSize) { throw new ArgumentException("String longer than accepted by database."); } recording = true; venueIPE = venue; streams = new Hashtable(Constants.InitialStreams); participants = new Hashtable(); conferenceID = DBHelper.CreateConference(conferenceDescription, venueIdentifier, DateTime.Now); // Store info about this conference to the instance, for debugging reference (mostly) this.conferenceDescription = conferenceDescription; this.venueIdentifier = venueIdentifier; this.venue = venue; // Create our performance counter perfCounter = new ConferenceRecorderPC(venueIdentifier + " : " + conferenceDescription); // Set up RTCP properties RtpEvents.RtpParticipantAdded += new MSR.LST.Net.Rtp.RtpEvents.RtpParticipantAddedEventHandler(this.OnNewRtpParticipant); RtpEvents.RtpStreamAdded += new MSR.LST.Net.Rtp.RtpEvents.RtpStreamAddedEventHandler(this.OnNewRtpStream); RtpEvents.RtpStreamRemoved += new MSR.LST.Net.Rtp.RtpEvents.RtpStreamRemovedEventHandler(this.OnRtpStreamRemoved); // Start listening RtpParticipant rtpMe = new RtpParticipant(Constants.PersistenceCName, Constants.PersistenceName + " (RECORDING)"); rtpSession = new RtpSession(venue, rtpMe, true, true); }
/// <summary> /// Starts recording a conference. Sets up the conference data and then records all streams received until told to stop. /// </summary> public void RecordConference( string conferenceDescription, string venueIdentifier, IPEndPoint venue ) { if( conferenceDescription.Length >= Constants.MaxDBStringSize || venueIdentifier.Length >= Constants.MaxDBStringSize ) throw new ArgumentException("String longer than accepted by database."); recording = true; venueIPE = venue; streams = new Hashtable(Constants.InitialStreams); participants = new Hashtable(); conferenceID = DBHelper.CreateConference( conferenceDescription, venueIdentifier, DateTime.Now); // Store info about this conference to the instance, for debugging reference (mostly) this.conferenceDescription = conferenceDescription; this.venueIdentifier = venueIdentifier; this.venue = venue; // Create our performance counter perfCounter = new ConferenceRecorderPC( venueIdentifier + " : " + conferenceDescription ); // Set up RTCP properties RtpEvents.RtpParticipantAdded += new MSR.LST.Net.Rtp.RtpEvents.RtpParticipantAddedEventHandler(this.OnNewRtpParticipant); RtpEvents.RtpStreamAdded += new MSR.LST.Net.Rtp.RtpEvents.RtpStreamAddedEventHandler(this.OnNewRtpStream); RtpEvents.RtpStreamRemoved += new MSR.LST.Net.Rtp.RtpEvents.RtpStreamRemovedEventHandler(this.OnRtpStreamRemoved); // Start listening RtpParticipant rtpMe = new RtpParticipant(Constants.PersistenceCName, Constants.PersistenceName + " (RECORDING)"); rtpSession = new RtpSession(venue, rtpMe, true, true); }