def test_init(self): #params: ssrc, seq, ts, data, pt=None, ct=None, marker=0, # authtag='', xhdrtype=None, xhdrdata='' # test = "some data" ssrc, seq, ts, data, marker = (424242, 1, 143, test, 1) packet = RTPPacket(ssrc, seq, ts, data, marker=marker)
def _send_packet(self, pt, data, marker=0, xhdrtype=None, xhdrdata=''): if not self.RTCP.we_sent: #Updating we_sent self.RTCP.we_sent = True #Adding itself to senders table new_member = self.RTCP.member.copy() loc = self.getVisibleAddress() #new_member['addr'] = "localhost" #new_member['port'] = loc[1]+1 self.RTCP.senders_table[self.ssrc] = new_member #Building packet packet = RTPPacket(self.ssrc, self.seq, self.ts, data, pt=pt, marker=marker, xhdrtype=xhdrtype, xhdrdata=xhdrdata) self.seq += 1 rtp, session = self.app.currentRecordings[self.cookie] session.seq = self.seq # Note that seqno gets modulo 2^16 in RTPPacket, so it doesn't need # to be wrapped at 16 bits here. if self.seq >= 65536: self.seq = 1 bytes = packet.netbytes() ## For RTCP sender report. self.currentSentBytesTotal += len(bytes) self.currentSentPacketsTotal += 1 for ssrc in self.RTCP.members_table: if (ssrc != self.ssrc) and ( self.RTCP.members_table[ssrc]['rtcp_port'] != 0): try: dest = (self.RTCP.members_table[ssrc]['addr'], self.RTCP.members_table[ssrc]['rtcp_port'] - 1) if DEBUG: print "send RTP to " + str(dest) self.transport.write(bytes, dest) except MessageLengthError, e: print "Cannot write on socket ! Exception e (member: " \ + str(self.RTCP.members_table[ssrc]) self.last_sent_time = time()
def test_add(self): """Test Adding a packet to jitter buffer""" packet = RTPPacket(0, 42, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 0 self.jitter_buffer.add([packet, time]) assert(len(self.jitter_buffer.buffer) == 1), \ self.fail("Wrong size afther adding an element") assert(self.jitter_buffer.buffer[0][1] == 0), self.fail("Wrong value in the buffer for time") assert(self.jitter_buffer.buffer[0][0].header.seq == 42), self.fail("Wrong value in the buffer for seq num") packet = RTPPacket(0, 41, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 2 self.jitter_buffer.add([packet, time])
def test_packet_with_recovery(self): midi_list = [[[128, 10, 0], 1000], [[144, 32, 110], 1000]] recovery_journal_system = RecoveryJournal() seq = 12 #midi session part (sending) packet = OldPacket(seq, midi_list, 0) midi_list_formated, length = MidiCommand().encode_midi_commands( midi_list) header = MidiCommand().header(0, 1, 0, 0, length) #Building Chunk recovery_journal_system.update(packet) recovery_journal = recovery_journal_system.content chunk = header + midi_list_formated + recovery_journal #protocol part packet = RTPPacket(424242, seq, 10, chunk, 96, marker=1) bytes = packet.netbytes() packet = parse_rtppacket(bytes) #midisession part (receiving) marker_b, marker_j, marker_z, marker_p, length = MidiCommand( ).parse_header(packet.data[0]) if marker_p: #silent packet with recovery midi_list = [] else: #normal packet #Extract Midi Note (length en nb notes) print "test 1:", len(packet.data[1:length * 7 + 1]) midi_list = packet.data[1:length * 7 + 1] #Decoding midi commands midi_list = MidiCommand().decode_midi_commands(midi_list, length) #Saving feed history packet_to_save = OldPacket(seq, midi_list, 0) #Extract Midi Recovery Journal if is present in the packet and #the previous packet has been lost if marker_j: print "recovery journal" print len(packet.data[length * 7 + 1:]) journal = packet.data[length * 7 + 1:] #Parse Recovery journal r_journal = recovery_journal_system.parse(journal)
def test_get_packets(self): """Testing Get Packets from jitter buffer""" #Adding packets packet = RTPPacket(0, 42, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 0 self.jitter_buffer.add([packet, time]) packet = RTPPacket(0, 43, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 5 self.jitter_buffer.add([packet, time]) packet = RTPPacket(0, 45, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 8 self.jitter_buffer.add([packet, time]) packet = RTPPacket(0, 44, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 9 self.jitter_buffer.add([packet, time]) res = self.jitter_buffer.get_packets(9) assert(len(res)==4), self.fail("Wrong size returned") for i in range(len(res)): assert(res[i].header.seq==42+i), self.fail("Wrong seq num returned") assert(len(self.jitter_buffer.buffer)==0), self.fail("Packets have not been erase from jitter buffer")
def test_has_seq(self): """Testing seq num existenze in the buffer""" #Adding packets packet = RTPPacket(0, 42, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 0 self.jitter_buffer.add([packet, time]) packet = RTPPacket(0, 43, 0, "", 0, \ marker=0, \ xhdrtype=None, xhdrdata='') time = 5 self.jitter_buffer.add([packet, time]) #TEsting values res = self.jitter_buffer.has_seq(42) assert(res==True), \ self.fail("Wrong answer from has_seq, can't find an int that is in the buffer") res = self.jitter_buffer.has_seq(54) assert(res==False), \ self.fail("Wrong answer from has_seq, can find an int that isn't in the buffer")
def _send_packet(self, pt, data, marker=0, xhdrtype=None, xhdrdata=''): if not self.RTCP.we_sent: #Updating we_sent self.RTCP.we_sent = True #Adding itself to senders table new_member =self.RTCP.member.copy() loc = self.getVisibleAddress() #new_member['addr'] = "localhost" #new_member['port'] = loc[1]+1 self.RTCP.senders_table[self.ssrc] = new_member #Building packet packet = RTPPacket(self.ssrc, self.seq, self.ts, data, pt=pt, marker=marker, xhdrtype=xhdrtype, xhdrdata=xhdrdata) self.seq += 1 rtp, session = self.app.currentRecordings[self.cookie] session.seq = self.seq # Note that seqno gets modulo 2^16 in RTPPacket, so it doesn't need # to be wrapped at 16 bits here. if self.seq >= 65536: self.seq = 1 bytes = packet.netbytes() ## For RTCP sender report. self.currentSentBytesTotal += len(bytes) self.currentSentPacketsTotal += 1 for ssrc in self.RTCP.members_table: if (ssrc != self.ssrc) and (self.RTCP.members_table[ssrc]['rtcp_port'] != 0): try: dest = (self.RTCP.members_table[ssrc]['addr'], self.RTCP.members_table[ssrc]['rtcp_port']-1) if DEBUG: print "send RTP to " + str(dest) self.transport.write(bytes, dest) except MessageLengthError, e: print "Cannot write on socket ! Exception e (member: " \ + str(self.RTCP.members_table[ssrc]) self.last_sent_time = time()
def test_checksum(self): #Test a good packet packet = RTPPacket(424242, 2, 10, "", pt=96) bytes = packet.netbytes() res = self.rtp.checksum(bytes) assert (res == 1), self.fail("Wrong checksum for RTP packet")
def test_checksum(self): #Test a good packet packet = RTPPacket(424242, 2, 10, "", pt=96) bytes = packet.netbytes() res = self.rtp.checksum(bytes) assert(res==1), self.fail("Wrong checksum for RTP packet")