Exemplo n.º 1
0
    def listenRtp(self):
        """Listen for RTP packets."""
        print("....................Try listening ...............")
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    #print("Frame receieved : ")
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("---> Current Seq Number : " + str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        #print("Video on")
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                #if self.playEvent.isSet():
                #break
                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 2
0
    def listenRtp(self):
        """Listen for RTP packets."""
        # TODO [listen Rtp]
        while True:
            try:
                data = self.rtpSocket.recv(self.BUFFER_SIZE)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

                        # TODO: Update timer
                        if int(self.frameNbr) % int(
                                self.fps
                        ) == 0 or self.frameNbr == self.noFrames:
                            self.updateCountDownTimer()
                            # self.step()

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN or STOP
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
    def listenRtp(self):
        # Listen for RTP packets.
        while True:
            try:
                while True:
                    enc_frame = self.rtpSocket.recv(20480)
                    if enc_frame:
                        rtpPacket = RtpPacket()
                        rtpPacket.decode(enc_frame)
                        break
                while True:
                    nonce = self.rtpSocket.recv(1024)
                    if nonce:
                        frame = self.aesgcm.decrypt(nonce,
                                                    rtpPacket.getPayload(),
                                                    None)
                        currFrameNbr = rtpPacket.seqNum()
                        print("Current Seq Num: " + str(currFrameNbr))
                        break

                if currFrameNbr > self.frameNbr:  # must be new packet
                    self.frameNbr = currFrameNbr
                    self.updateMovie(self.writeFrame(frame))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.exitAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
    def listenRtp(self):
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                print("Didn't receive data!")
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 6
0
	def listenRtp(self):
		"""Listen for the RTP/UDP socket """
		while True:
			try:
				# read data over RTP/UDP socket
				receivedRtpData= self.rtpSocket.recv(20480)

				if receivedRtpData:
					# create RtpPacket instance
					rtpPacket = RtpPacket()
					# encode Rtppacket
					rtpPacket.decode(receivedRtpData)
					# RtpPacket FrameNbr
					self.rtpPacketFrame = rtpPacket.seqNum()
					if self.rtpPacketFrame > self.frame:
						self.frame = self.rtpPacketFrame
						#print "RtpPacket FrameNbr: " + str(self.rtpPacketFrame)
						print "Movie Frame: " + str(self.frame)
						self.updateScreen(self.frame, rtpPacket.getPayload())
					
			except:
				# Stop listening upon requesting PAUSE or TEARDOWN
				if self.pauseEvent.isSet(): 
					break
				# Upon receiving ACK for TEARDOWN request,
				# close the UDP socket
				if self.teardownAcked == 1:
					"""Without try...except... will raise "error: [Errno 9] Bad file descriptor". Don't know why, seems like rtspSocket name is wrong."""
					try:
						self.rtpSocket.shutdown(socket.SHUT_RDWR)
					except:
						pass
					self.rtpSocket.close()
					break
Exemplo n.º 7
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(40960)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    currFrameNumber = rtpPacket.seqNum()

                    if currFrameNumber > self.frameNumber:
                        self.frameNumber = currFrameNumber
                        self.updateVideo(
                            self.writeFrame(rtpPacket.getPayload()))

                        currentTime = self.frameNumber // self.fps
                        self.setCurrentTime(currentTime)

                        self.receivedBytes += len(rtpPacket.getPacket())
                        self.setVideoRate(time.time() - self.startTime,
                                          self.receivedBytes)

                        totalFrames = rtpPacket.getFrameCnt()
                        self.totalReceivedFrames += 1
                        self.setLossRate(totalFrames, self.totalReceivedFrames)
            except:
                if self.playEvent.isSet():
                    self.resetVideoRate()
                    break
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)

                #------------------------------
                #-------CODE-OF-MINE-----------
                #------------------------------
                curtime = time.time()
                self.toltalPlayTime += curtime - self.startTime
                self.startTime = curtime
                #-----------END----------------

                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

                    #------------------------------
                    #-------CODE-OF-MINE-----------
                    #------------------------------
                    # calculate statistics
                    if currFrameNbr > self.highSeqNum:
                        self.highSeqNum = currFrameNbr
                    self.expRtpNum += 1
                    if self.expRtpNum < currFrameNbr:
                        self.sumLost += 1
                        #self.expRtpNum += 1
                    self.dataRate = 0 if (
                        self.toltalPlayTime
                        == 0) else self.totalBytes / self.toltalPlayTime
                    self.fractionLost = float(self.sumLost / self.highSeqNum)
                    self.totalBytes += len(data) - 12
                    update = "Total Bytes Received: " + str(
                        self.totalBytes) + "\nPacket Lost Rate: " + str(
                            self.fractionLost) + "\nData Rate: " + str(
                                self.dataRate) + " bytes/s"
                    self.label1 = Label(text=update)
                    self.label1.grid(row=2, column=1)
                    #--------------END--------------

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 9
0
	def parseReplyRtp(self):
		while True:
			if self.playthread.isSet(): break
			try:
				rtpPacket=self.rtpSocket.recv(RTPBUFFERSIZE)
				if rtpPacket:
					if not rtpPacket.startswith(RTSPVERSION):
						self.fileWritelock.acquire()# acquire lock for writing image file to the disk
						try:
							rtpp=RtpPacket()
							rtpp.decode(rtpPacket)
							if self.frameNumber<rtpp.seqNum():# ignore late packets with lower sequence number
								self.frameNumber=rtpp.seqNum()
								movieFile="cache-"+self.sessionId+".jpg"
								with open(movieFile,"wb") as tmp:# write binary
									tmp.write(rtpp.getPayload())# write actual data
								self.loadedFrame.append(rtpp)
								time.sleep(0.05)# pause for 50 milliseconds for synchronized with server sending interval
								photo=ImageTk.PhotoImage(Image.open(movieFile))
								self.label.configure(image=photo,height=288)
								self.label.image=photo
						finally:
							self.fileWritelock.release()# release the lock
					else:
						print rtpPacket
						self.endOfStream=True
						temp=rtpPacket.strip().split(MESSAGESEP)
						self.calculateTimeDiff()
						self.totalFrame=temp[1].split()[1]
			except:
				print "\n"
				traceback.print_exc(file=sys.stdout)
Exemplo n.º 10
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    self.totPackets += 1.0
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print "Current Seq Num: " + str(currFrameNbr)

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.numPackets += 1.0
                        self.numBytes = self.numBytes + sys.getsizeof(
                            rtpPacket.getPayload())
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 11
0
        def getRtp(self):
                while True:
                        try: 
                                # receive the video data from the server
                                vedio = self.rtpSocket.recv(65535)
                                if vedio:
                                        time.sleep(0.035)
                                        rtpCon = RtpPacket()
                                        rtpCon.decode(vedio)
                                        currFrameNbr = rtpCon.seqNum()

                                        if currFrameNbr > self.NowNbr:
                                                self.NowNbr = currFrameNbr
                                                self.updateMovie(self.writeFrame(rtpCon.getPayload())) 
                                        else:
                                                self.updateMovie(self.writeFrame(rtpCon.getPayload()))

                        except:
                                if self.playEvent.isSet() and self.teardownACK ==1:
                                        self.teardownACK = 0
                                        #close the rtp socket, if the movie is already over, print the text!
                                        try:
                                                self.rtpSocket.shutdown(socket.SHUT_RDWR)
                                                self.rtpSocket.close()
                                        except:
                                                print "fiish playing"
                                        break

                                if self.playEvent.isSet():
                                        break
Exemplo n.º 12
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                print("listening")
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print "Current Seq Num: " + str(currFrameNbr)

                    if currFrameNbr > self.frameNbr: # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 13
0
    def listenRtp(self):
        while True:
            try:
                data, addr = self.rtpSocket.recvfrom(20480)

                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    print "Current Seq Num: " + str(rtpPacket.seqNum())

                    #Check for dropped packets and update counter
                    try:
                        if self.frameNbr + 1 != rtpPacket.seqNum():
                            self.counter += 1
                            print '*' * 3 + "PACKET DROPPED" + '*' * 3
                        currFrameNbr = rtpPacket.seqNum()
                    except:
                        traceback.print_exc(file=sys.stdout)

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 14
0
    def getRtp(self):
        while True:
            try:
                # receive the video data from the server
                vedio = self.rtpSocket.recv(65535)
                if vedio:
                    time.sleep(0.035)
                    rtpCon = RtpPacket()
                    rtpCon.decode(vedio)
                    currFrameNbr = rtpCon.seqNum()

                    if currFrameNbr > self.NowNbr:
                        self.NowNbr = currFrameNbr
                        self.updateMovie(self.writeFrame(rtpCon.getPayload()))
                    else:
                        self.updateMovie(self.writeFrame(rtpCon.getPayload()))

            except:
                if self.playEvent.isSet() and self.teardownACK == 1:
                    self.teardownACK = 0
                    #close the rtp socket, if the movie is already over, print the text!
                    try:
                        self.rtpSocket.shutdown(socket.SHUT_RDWR)
                        self.rtpSocket.close()
                    except:
                        print "fiish playing"
                    break

                if self.playEvent.isSet():
                    break
Exemplo n.º 15
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    self.numberFrameRec += 1
                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        if currFrameNbr - self.frameNbr > 1:
                            self.numberFrameLos += currFrameNbr - self.frameNbr - 1
                        self.frameNbr = currFrameNbr
                        self.dataSize += len(rtpPacket.getPayload())
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    self.videoTime += time() - self.startTime
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                print("LISTENING...")
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("CURRENT SEQUENCE NUM: " + str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 17
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet

                        if currFrameNbr - self.frameNbr > 1:
                            self.stat[
                                "lossPackage"] += currFrameNbr - self.frameNbr - 1

                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

                    if self.stat["recv"] == 0 or (self.stat.get("pause")
                                                  and self.stat["pause"]):
                        self.stat["beginTransmit"] = rtpPacket.timestamp()
                        self.stat["pause"] = False
                        self.stat["recv"] += len(bytes(rtpPacket.getPayload()))
                        continue
                    self.stat["recv"] += len(bytes(rtpPacket.getPayload()))
                    # curTime = int(time()*(10**7)) % 0x100000000
                    curTime = rtpPacket.timestamp()
                    self.stat["transmitTime"] += (
                        curTime - self.stat["beginTransmit"]) / (10**7)
                    self.stat["beginTransmit"] = curTime

                    self.Statistic["text"] = (
                        "Statistic :\n" +
                        "\tAvgDataRate: {value}\n".format(value=str(
                            round(
                                self.stat["recv"] /
                                self.stat["transmitTime"], 3))) +
                        "\tlossRate(%): {value}".format(value=str(
                            round(
                                self.stat["lossPackage"] / self.frameNbr *
                                100, 3))))

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 18
0
    def DataLinkReceive(self):
        '''
		描述:处理服务器的控制连接回复
        参数:回复内容
        返回:无
		'''
        WhetherStartedPlay = False
        while True:
            try:
                TheData, TheAddress = self.DataSocket.recvfrom(
                    Constants.DATA_PACKET_SIZE)
                #控制接收文件
                if TheData:
                    ThePacket = RtpPacket()
                    ThePacket.decode(TheData)

                    CurrentSequenceNum = ThePacket.seqNum()
                    CurrentMarker = ThePacket.Marker()

                    #丢弃其余数据包
                    if self.DataSequence == CurrentSequenceNum - 1:
                        #print("received packet ", CurrentSequenceNum)
                        #回复ACK
                        ACKMessage = "ACK " + str(CurrentSequenceNum)
                        self.DataSocket.sendto(ACKMessage.encode(), TheAddress)

                        #判断是否新图片
                        if CurrentMarker == 0:
                            self.PictureFrame = self.PictureFrame + 1
                            #print(self.PictureFrame)

                        #写入
                        self.DataSequence = CurrentSequenceNum
                        self.WritePictureFrame(ThePacket.getPayload())

                #控制播放图片
                if self.PictureFrame - self.PicturePlay >= (
                        self.PicturePerSecond * self.BufferTime):
                    if WhetherStartedPlay == False:
                        WhetherStartedPlay = True
                        threading.Thread(target=self.UpdateMovie).start()

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.PlayEvent.isSet():
                    break

                #处理teardown事件
                if self.Valid == False:
                    try:
                        self.DataSocket.shutdown(socket.SHUT_RDWR)
                        self.DataSocket.close()
                    except:
                        donothing = True
                    break
    def listenRtp(self):
        """Listen for RTP packets."""
        # TODO
        startTime = time.time()
        endTime = time.time()
        while True:
            try:
                startTime = time.time()
                data, addr = self.rtpSocket.recvfrom(20480)
                # data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    print("||Received Rtp Packet #" + str(rtpPacket.seqNum()) +
                          "|| ")
                    try:
                        if self.frameNbr + 1 != rtpPacket.seqNum():
                            self.counter += 1
                            print("self.frameNbr:", self.frameNbr)
                            print("rtpPacket.seqNum():", rtpPacket.seqNum())
                            print('!' * 60 + "\nPACKET LOSS\n" + '!' * 60)
                        currFrameNbr = rtpPacket.seqNum()
                    except:
                        print("seqNum() error")
                        print('-' * 60)
                        traceback.print_exc(file=sys.stdout)
                        print('-' * 60)

                    if currFrameNbr != self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                    endTime = time.time()
                    self.loss_rate["text"] = "Loss rate: {: .02f}%".format(
                        100 * float(self.counter / self.frameNbr))
                    self.fps["text"] = "FPS: {}".format(
                        int(1 / (endTime - startTime)))
                    self.progressbar[
                        'value'] = self.frameNbr * 100 / self.totalFrame
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                print("Didn't receive data!")

                if self.playEvent.isSet():
                    print("Continue to click")
                    break

                if self.setupEvent.isSet():
                    break
                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
            if self.teardownAcked == 1:
                self.rtpSocket.shutdown(socket.SHUT_RDWR)
                self.rtpSocket.close()
                break
Exemplo n.º 20
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)

                # Time
                curTime = time.time()
                self.statTotalPlayTime += curTime - self.statStartTime
                self.statStartTime = curTime
                # -----------------------------

                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Received frame", currFrameNbr)

                    # Calculate statistics

                    # Data rate
                    self.statDataRate = 0 if self.statTotalPlayTime == 0 else (self.statTotalByte / self.statTotalPlayTime)

                    # Lost rate
                    if currFrameNbr != self.frameNbr + 1:
                        self.statLostPack += 1
                    if currFrameNbr > self.statHighestSq:
                        self.statHighestSq = currFrameNbr
                    if self.statHighestSq != 0:
                        self.statLostRate = self.statLostPack / self.statHighestSq

                    # Total data
                    self.statTotalByte += len(data)
                    # ----------------------------------------------------

                    if currFrameNbr > self.frameNbr:  # Discard the old packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(self.writeFrame(rtpPacket.getPayload()))
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    try:
                        self.rtpSocket.shutdown(socket.SHUT_RDWR)
                        self.rtpSocket.close()
                    except:
                        pass
                    break
Exemplo n.º 21
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                print("A espera de pacotes RTP...")
                data = self.rtpSocket.recv(20480)
                # take current time and keep total Play Time
                curTime = int(round(time.time() * 1000))
                self.totalPlayTime += curTime - self.startTime
                self.startTime = curTime

                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    #Update Total of Bytes received
                    self.totalOfBytes += rtpPacket.getPayloadSize(len(data))
                    self.labelTotalBytesRcv.configure(
                        text="Total de Bytes Recebidos: " +
                        str(self.totalOfBytes))

                    currFrameNbr = rtpPacket.seqNum()
                    print "Sequência Atual (Frame): " + str(currFrameNbr)

                    self.sequenceExpectedRTPMessage += 1
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                    # if we lost any packet
                    if self.sequenceExpectedRTPMessage != currFrameNbr:
                        self.totalPacketsLost += 1
                        self.labelLostPackets.configure(
                            text="Pacotes Perdidos: " +
                            str(self.totalPacketsLost))

                    #Update rate: Bytes per Second
                    self.dataRate = 0 if self.totalPlayTime == 0 else (
                        self.totalOfBytes / (self.totalPlayTime / 1000.0))
                    self.labelRateTransf.configure(
                        text="Taxa de transferência: " + str(self.dataRate) +
                        " B/s")
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 22
0
    def jumbNext(self):
        if self.state != self.INIT:
            self.sendRtspRequest(self.NEXT)
            data = self.rtpSocket.recv(20480)
            if data:
                rtpPacket = RtpPacket()
                rtpPacket.decode(data)

                currFrameNbr = rtpPacket.seqNum()
                print("Current Seq Num: " + str(currFrameNbr))

                self.frameNbr = currFrameNbr
                self.updateMovie(self.writeFrame(rtpPacket.getPayload()))
Exemplo n.º 23
0
    def listenRtp(self):
        "Listen for RTP packages"

        while True:
            try:
                data = self.rtpSocket.recv(20480)

                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    currFrameNbr = rtpPacket.seqNum()  #Server response seq num

                    print("===================================")
                    print("Client Frame Num: " + str(self.frameNbr))
                    print("Server Response Frame Num: " + str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        # Calculate and update Statistics, late packet counted as lost
                        self.pckLost += currFrameNbr - self.frameNbr - 1
                        self.rcv += 1
                        self.lossRate = self.pckLost / (self.pckLost +
                                                        self.rcv)
                        self.totalRcvBytes += sys.getsizeof(
                            rtpPacket.getPayload())
                        print("Total rcv {}".format(self.totalRcvBytes))
                        print("Payload: {}".format(
                            sys.getsizeof(rtpPacket.getPayload())))
                        self.totalTime = int(
                            time()) - self.startTime + self.accumTime
                        print("Time {}".format(self.totalTime))
                        self.dataRate = (
                            self.totalRcvBytes /
                            self.totalTime) if self.totalTime != 0 else 0

                        self.updateText()

                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

            except:
                # If paused, stop listening
                if self.playEvent.isSet():
                    break

                # Close RTP socket
                if self.isTearDowned:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 24
0
    def listenRtp(self):
        while True:
            try:
                # slightly less than the maximum
                data = self.rtpSocket.recv(50000)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    self.frameNbr = rtpPacket.seqNum()

                    # for video, combine the small packets together
                    if rtpPacket.payloadType() == 26:
                        if self.video_frame_no == rtpPacket.seqNum():
                            self.packet_data += rtpPacket.getPayload()
                        else:
                            self.video_frame_no = rtpPacket.seqNum()
                            self.collectVideoFrame(self.packet_data,
                                                   self.video_frame_no - 1)
                            self.packet_data = rtpPacket.getPayload()
                    # audio
                    elif rtpPacket.payloadType() == 10:
                        self.collectAudioFrame(rtpPacket.getPayload(),
                                               self.frameNbr)
                    # text
                    elif rtpPacket.payloadType() == 37:
                        self.collectSubtitle(rtpPacket.getPayload(),
                                             self.frameNbr)
                else:
                    # remaining data that belongs to video
                    if self.packet_data:
                        self.collectVideoFrame(self.packet_data,
                                               self.video_frame_no)
                    break

            except Exception as e:
                print("rtp", str(e))
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    self.rtsp_seq = 0
                    self.teardownAcked = 0
                    break
	def listenRtp(self):		
		"""Listen for RTP packets."""
		while True:
			try:
				data = self.rtpSocket.recv(20480)
				print("[*]Received RTP packet")

				curTime = time.time()
				self.totalPlayTime += curTime - self.startTime
				self.startTime = curTime

				if data:
					rtpPacket = RtpPacket()
					rtpPacket.decode(data)

					# Tính tổng số byte nhận được bằng cách cộng dồn size của payload
					self.totalBytes += len(rtpPacket.getPayload())
					
					currFrameNbr = rtpPacket.seqNum()
					print("Current Seq Num: " + str(currFrameNbr))

					# xác định mất gói và số gói bị mất  (Packet loss rate is defined as the fraction of the total transmitted packets that did not arrive at the receiver.)
					if self.frameNbr + 1 != currFrameNbr:
						self.lostNum += currFrameNbr - self.frameNbr - 1
						print("[*]Packet loss!")

					# tính packet loss rate
					self.statLost = 0 if self.lostNum == 0 else self.lostNum/currFrameNbr

					# Tính data rate
					self.dataRate = round(self.totalBytes/self.totalPlayTime, 2)

					# Update lại các thông số
					self.updateStat()

					if currFrameNbr > self.frameNbr: # Discard the late packet
						self.frameNbr = currFrameNbr
						self.updateMovie(self.writeFrame(rtpPacket.getPayload()))
			except:
				# Stop listening upon requesting PAUSE or TEARDOWN
				if self.playEvent.isSet(): 
					break
				
				# Upon receiving ACK for TEARDOWN request,
				# close the RTP socket
				if self.teardownAcked == 1:
					self.rtpSocket.shutdown(socket.SHUT_RDWR)
					self.rtpSocket.close()
					break
Exemplo n.º 26
0
    def listenRtp(self):
        """Listen for RTP packets."""
        self.TIMESTART = time.time()
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    self.TOTALSIZE += len(data)
                    currFrameNbr = rtpPacket.seqNum()
                    self.COUNT += 1
                    if self.COUNT != currFrameNbr:
                        self.TOTALLOSSPACKET += 1
                        self.COUNT = currFrameNbr
                    print("Current Seq Num: " + str(currFrameNbr))
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                    if self.COUNT == 500:
                        self.TIMEEND = time.time()
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    if self.TIMEEND == 0:
                        self.TIMEEND = time.time()
                    print("Rate loss packet: " + str(
                        round((self.TOTALLOSSPACKET /
                               (self.COUNT - self.PASTSTOP)) * 100, 2)) + "%")
                    print("Video data rate: " + str(
                        round((self.TOTALSIZE /
                               (self.TIMEEND - self.TIMESTART)), 2)) +
                          str("byte/s"))

                    self.PASTSTOP = self.COUNT
                    self.TOTALLOSSPACKET = 0
                    self.TIMEEND = 0
                    self.TOTALSIZE = 0
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 27
0
    def listenRtp(self):
        """Listen for RTP packets."""
        self.startingTime = datetime.now()
        oldframeNbr = 0
        self.setClientStat()
        ploss = 0
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))
                    self.totalByte += len(rtpPacket.getPayload())
                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        if (currFrameNbr - self.frameNbr > 1):
                            ploss = ploss + currFrameNbr - self.frameNbr - 1
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                    self.totalPlayTime = datetime.now() - self.startingTime
                    self.lossRate = ploss / self.frameNbr * 100
                    print("LossRate : " + str(self.lossRate) +
                          "    Loss Packet : " + str(ploss))
                    print("Total data : " + str(self.totalByte))
                    print("Playtime : " + str(self.totalPlayTime))
                    self.dataRate = self.totalByte / abs(
                        self.totalPlayTime.seconds) / 1024
                    print("Data rate " + "{:.2f}".format(self.dataRate) +
                          " kb/s")
                    if (self.frameNbr - oldframeNbr > 20):
                        oldframeNbr = self.frameNbr
                        self.setClientStat()

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    # reconnect to server
                    break
Exemplo n.º 28
0
	def receiveRtp(self):
		maxFrameTime = 0.05 * self.maxFrameNum
		while self.rtpListener_PlayingFlag:
			try:
				data = self.rtpSocket.recv(1024*1024) #1MB buffer
				if data:
					packet = RtpPacket()
					packet.decode(data)

					if(self.currentFrame + 1 != packet.seqnum):
						self.lossFrame += 1
					self.currentFrame = packet.seqnum
					self.totalFrame += 1

					current = time.time()
					duration = current - self.lastTime
					self.lastTime = current
					speed = len(packet.frame) / duration
					fps = 1/duration

					currentFrameTime = 0.05 * self.currentFrame
					remainingTime = maxFrameTime - currentFrameTime
					
					#Extend 1
					stats = "RTP Packet: " + str(self.currentFrame) + "\n\n"
					stats += "RTP Lost Packet: " + str(self.lossFrame) + "\n\n"
					stats += "Loss Rate: " + '{:.2f}'.format(self.lossFrame / self.totalFrame * 100) + "%\n\n"
					stats += "Data Rate: " + '{:.2f}'.format(speed) + " Bytes/s\n\n"
					stats += "Frame Duration: " + '{:.0f}'.format(duration*1000) + " ms\n\n"
					stats += "Frame per Second: " + '{:.2f}'.format(fps) + "\n\n"
					stats += "-----------------------\n\n"
					#Extend 4
					stats += "Remaining Time: " + '{:.0f}'.format(remainingTime) + " s\n\n"
					stats += "Total Time: " + '{:.0f}'.format(maxFrameTime) + " s\n\n"

					self.statsLabel.configure(text = stats, font = "Raleway")

					file_jpgdata = BytesIO(packet.frame) #PIL Image.open accept jpeg format from a file stream
					self.photo = ImageTk.PhotoImage(Image.open(file_jpgdata))
					self.imagePanel.configure(image = self.photo)
					self.imagePanel.image = self.photo

					#self.videoScrollBar.set(self.currentFrame - 1) #This will trigger the callback
					self.controlScrollVar.set(self.currentFrame - 1) #This won't trigger the callback
			except:
					pass
Exemplo n.º 29
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    print("Current Seq Num: " + str(rtpPacket.seqNum()))

                    try:
                        if self.frameNbr + 1 != rtpPacket.seqNum():
                            self.counter += 1
                            print('!' * 60 + '\nPacket Loss\n' + '!' * 60)
                        currFrameNbr = rtpPacket.seqNum()
                    except:
                        print("seqNum() ERROR")
                        traceback.print_exc(file=sys.stdout)

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        payload = rtpPacket.getPayload()
                        self.totalSize += payload.__sizeof__()

                        self.currentTimeStamp = rtpPacket.timestamp()
                        if self.firstPacket == 0:
                            self.initTimestamp = rtpPacket.timestamp()
                            self.firstPacket = 1

                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                        self.updateStat()

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.state == self.PLAYING:
                    print('Didn\'t receive data')
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 30
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    self.frameReceive += 1
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: " + str(currFrameNbr))

                    if currFrameNbr >= self.frameNbr:  # Discard the late packet
                        if currFrameNbr - self.frameNbr > 1:
                            self.frameLoss += currFrameNbr - self.frameNbr
                            print('-' * 60)
                            print(' ' * 20 +
                                  f'FRAME LOSS: {currFrameNbr-self.frameNbr}' +
                                  ' ' * 20)
                            print('-' * 60)
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked or self.stopAcked:
                    self.rtpSocket.close()
                    print('-' * 60)
                    print(' ' * 20 + f'LOSS: {self.frameLoss}' + ' ' * 20)
                    print(' ' * 20 + f'RECEIVE: {self.frameReceive}' +
                          ' ' * 20)
                    print(' ' * 20 +
                          f'LOSS RATE: {self.frameLoss/self.frameNbr:.6f}' +
                          ' ' * 20)
                    print('-' * 60)
                    break
                if self.extend:
                    if self.frameNbr >= self.progressbar['maximum']:
                        self.stopMovieExtends()
Exemplo n.º 31
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    arrivalTimeOfPacket = time.perf_counter()
                    print("Current Seq Num: " + str(currFrameNbr))

                    self.bytes += len(rtpPacket.getPacket())

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                        #statUpdate
                        self.packets += 1
                        self.packetsLost += currFrameNbr - self.lastSequence - 1
                        #calculate total jitter
                        if self.lastSequence == currFrameNbr - 1 and currFrameNbr > 1:
                            interPacketSpacing = arrivalTimeOfPacket - self.arrivalTimeofPreviousPacket
                            jitterIncrement = abs(interPacketSpacing -
                                                  self.lastPacketSpacing)
                            self.totalJitter = self.totalJitter + jitterIncrement
                            self.lastPacketSpacing = interPacketSpacing

                        self.arrivalTimeofPreviousPacket = arrivalTimeOfPacket
                        self.lastSequence = currFrameNbr
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    self.displayStats()
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.displayStats()
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 32
0
    def listenRtp(self):
        """Listen for RTP packets."""
        isMiddle = False
        data = bytearray()
        while True:
            try:
                #print("listening")
                while True:
                    packetChunk = self.rtpSocket.recv(20480)
                    if packetChunk.find("EOF".encode("utf-8")) >= 0:
                        if packetChunk.find("EOF".encode("utf-8")) == 0:
                            isMiddle = False
                        else:
                            isMiddle = True
                        break
                    else:
                        data += packetChunk
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()
                    print("Current Seq Num: ", str(currFrameNbr))

                    if currFrameNbr > self.frameNbr:  # Discard the late packet
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))

                if isMiddle:
                    data = packetChunk[packetChunk.find("EOF".encode("utf-8")
                                                        ):]
                else:
                    data = bytearray()
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
Exemplo n.º 33
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            if self.playEvent.isSet():
                break
            try:
                data = self.rtpSocket.recv(62040)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)

                    currFrameNbr = rtpPacket.seqNum()

                    self.bufferFrameNbr = currFrameNbr
                    self.frameQueue[
                        self.bufferFrameNbr] = rtpPacket.getPayload()
            except Exception as e:
                print("listen error:", e)
Exemplo n.º 34
0
    def listenRtp(self):
        """Listen for RTP packets."""
        while True:
            try:
                print("LISTENING...")
                data = self.rtpSocket.recv(20480)
                if data:
                    rtpPacket = RtpPacket()
                    rtpPacket.decode(data)
                    currFrameNbr = rtpPacket.seqNum()
                    print("CURRENT SEQUENCE NUM: " + str(currFrameNbr))
                    if currFrameNbr > self.frameNbr:
                        self.frameNbr = currFrameNbr
                        self.updateMovie(
                            self.writeFrame(rtpPacket.getPayload()))
                    currTime = int(round(time.time() * 1000))
                    self.statTotalPlayTime += currTime - self.statStartTime
                    self.statStartTime = currTime
                    self.statExpectedRptNbr += 1
                    if currFrameNbr > self.statHighestSeq:
                        self.statHighestSeq = currFrameNbr
                    if self.statExpectedRptNbr != currFrameNbr:
                        self.statCumLost += 1
                    if self.statTotalPlayTime == 0:
                        self.statDataRate = 0
                    else:
                        self.statDataRate = self.statTotalBytes / (
                            self.statTotalPlayTime / 1000.0)
                    self.statFractionLost = float(self.statCumLost /
                                                  self.statHighestSeq)
                    self.statTotalBytes += rtpPacket.getPayLoadSize()
                    self.updateStatLabel()
            except:
                # Stop listening upon requesting PAUSE or TEARDOWN
                if self.playEvent.isSet():
                    break

                # Upon receiving ACK for TEARDOWN request,
                # close the RTP socket
                if self.teardownAcked == 1:
                    self.rtpSocket.shutdown(socket.SHUT_RDWR)
                    self.rtpSocket.close()
                    break
	def listenRtp(self):
		while True:
			try:
				data,addr = self.rtpSocket.recvfrom(20480)

				if data:
					rtpPacket = RtpPacket()
					rtpPacket.decode(data)
					print "||Received Rtp Packet #" + str(rtpPacket.seqNum()) + "|| "

					try:
						if self.frameNbr + 1 != rtpPacket.seqNum():
							self.counter += 1
							print '!'*60 + "\nPACKET LOSS\n" + '!'*60
						currFrameNbr = rtpPacket.seqNum()
						#version = rtpPacket.version()
					except:
						print "seqNum() error"
						print '-'*60
						traceback.print_exc(file=sys.stdout)
						print '-'*60

					if currFrameNbr > self.frameNbr: # Discard the late packet
						self.frameNbr = currFrameNbr
						self.updateMovie(self.writeFrame(rtpPacket.getPayload()))

			except:
				# Stop listening upon requesting PAUSE or TEARDOWN
				print "Didn`t receive data!"
				if self.playEvent.isSet():
					break

				# Upon receiving ACK for TEARDOWN request,
				# close the RTP socket
				if self.teardownAcked == 1:
					self.rtpSocket.shutdown(socket.SHUT_RDWR)
					self.rtpSocket.close()
					break