Exemplo n.º 1
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.º 2
0
	def DataLinkReceive(self):		
		'''
		描述:处理服务器的控制连接回复
        参数:回复内容
        返回:无
		'''	
		while True:
			try:
				TheData = self.DataSocket.recv(Constants.DATA_PACKET_SIZE)
				if TheData:
					ThePacket = RtpPacket()
					ThePacket.decode(TheData)
					
					CurrentSequenceNum = ThePacket.seqNum()
					CurrentMarker = ThePacket.Marker()
					if CurrentMarker == 0:
						self.PictureFrame = self.PictureFrame + 1
						print("New Frame")
					print("Current Seq Num: " + str(CurrentSequenceNum))
										
					if CurrentSequenceNum > self.DataSequence: # Discard the late packet
						self.DataSequence = CurrentSequenceNum
						self.WritePictureFrame(ThePacket.getPayload())
						if CurrentMarker == 0:
							TheCacheFileName = self.GetPictureCacheFileName(self.PictureFrame - 1)
							self.UpdateMovie(TheCacheFileName)
			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