Exemplo n.º 1
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
Exemplo n.º 2
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
    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
    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
Exemplo n.º 6
0
    def makeRtp(self, payload, frameNbr):
        """RTP-packetize the video data."""
        version = 2
        padding = 0
        extension = 0
        cc = 0
        marker = 0
        pt = 26  # MJPEG type
        seqnum = frameNbr
        ssrc = 0

        extid = 0
        extlen = 1  # the length of the extension in 32-bit units,
        frameCnt = self.frameCnt + 1

        rtpPacket = RtpPacket()

        rtpPacket.encode(version,
                         padding,
                         extension,
                         cc,
                         seqnum,
                         marker,
                         pt,
                         ssrc,
                         payload,
                         extid,
                         extlen,
                         frameCnt=frameCnt)

        return rtpPacket.getPacket()
    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.º 8
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.º 9
0
 def sendRtp(self):
     while True:
         if self.event_trigger.isSet():
             break
         # It then sends the frame to the client over UDP every 50 milliseconds
         self.event_trigger.wait(0.05)
         # get the video source
         video = self.clientInfo['videoStream'].nextFrame()
         if video:
             videoNum = self.clientInfo['videoStream'].frameNbr()
             try:
                 rtpParket = RtpPacket()
                 # follow the format of RTP packet and establish the packet
                 rtpParket.encode(2, 0, 0, 0, videoNum, 0, 26, 0, video)
                 # send the data over UDP
                 self.rtpSocket.sendto(
                     rtpParket.getPacket(),
                     (self.clientAddr, self.clientrtpPort))
             except:
                 if self.rtpSocket == None:
                     self.rtpSocket.shutdown(socket.SHUT_RDWR)
                     self.rtpSocket.close()
                 traceback.print_exc(file=sys.stdout)
         else:
             print "Finish the playing"
             break
Exemplo n.º 10
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.º 11
0
 def createRtpPacket(self, path):
     file = open(path, "rb")
     data = file.read()
     file.close()
     rtp_packet = RtpPacket()
     rtp_packet.encode(0, 0, 0, 0, 0, 0, self.frame_number, 0, data)
     return rtp_packet
Exemplo n.º 12
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.º 13
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
Exemplo n.º 14
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:
                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.º 16
0
    def setPacket(self, frame, currentFrame, counter, ifEnd, frameNo,
                  totalFrame):
        # set packet
        rtpPacket = RtpPacket()
        rtpPacket.encode(2, 0, 0, 0, currentFrame, 0, 26, 0, frame, counter,
                         ifEnd, frameNo, totalFrame)

        return rtpPacket.getPacket()
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
    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.º 19
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
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 makePacket(self, payload, frameSeq):
        version = 2
        padding = 0
        extension = 0
        CC = 0
        marker = 0
        PT = 26
        seqNum = frameSeq
        SSRC = 0

        rtpPacket = RtpPacket()
        rtpPacket.encode(version, padding, extension, CC, seqNum, marker, PT,
                         SSRC, payload)
        return rtpPacket.getPacket()
Exemplo n.º 24
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
    def makeRtp(self, payload, frameNbr):
        """RTP-packetize the video data."""
        version = 2
        padding = 0
        extension = 0
        cc = 0
        marker = 0
        pt = 26  # MJPEG type
        seqnum = frameNbr
        ssrc = 0

        rtpPacket = RtpPacket()
        rtpPacket.encode(version, padding, extension, cc, seqnum, marker, pt, ssrc, payload)
        return rtpPacket.getPacket()
Exemplo n.º 26
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.º 28
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.º 29
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.º 30
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