示例#1
0
 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)
示例#2
0
文件: protocol.py 项目: imclab/scenic
 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()
示例#3
0
    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])
示例#4
0
    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)
示例#5
0
    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")
示例#6
0
    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")
示例#7
0
    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()
示例#8
0
 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")
示例#9
0
 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")