Exemplo n.º 1
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.º 2
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()
Exemplo n.º 3
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.º 4
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.º 5
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()
    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.º 7
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

        rtpPacket = RtpPacket()

        rtpPacket.encode(version, padding, extension, cc, seqnum, marker, pt, ssrc, payload)

        return rtpPacket.getPacket()
Exemplo n.º 8
0
	def rtpConnect(self):
		"""Send messages over UDP."""
		while True:
			# wait until current rtp has sent data
			self.playEvent.wait(0.05)
			# Stop sending if request is PAUSE or TEARDOWN
			if self.playEvent.isSet():
				break
			
			# RtpPacket arguments
			version = 2
			padding = 0
			extension = 0
			cc = 0
			seqnum = self.file.frameNbr()
			marker = 0
			pt = 26
			ssrc = 34

			payload = self.file.nextFrame()

			# if not finished playing
			if payload:	
				# create RtpPacket instance
				rtpPacket = RtpPacket()
				# encode Rtppacket
				rtpPacket.encode(version, padding, extension, cc, seqnum, marker, pt, ssrc, payload)
				# getPacket
				packet = rtpPacket.getPacket()
				# get the RTP/UDP address of client
				self.rtpAddress = self.clientInfo['rtspSocket'][1][0]
				try:
					self.rtpScoket.sendto(packet,(self.rtpAddress, self.rtpPort))
				except:
					self.rtpError += 1
					print "ServerWorker RTP/UDP Sending Error: %d" % self.rtpError
			
			# if finished playing, inform client
			else:
				self.state = self.INIT
				self.finishPlaying(seqnum-1)
				
				break

				"""Terminate thread. Problem with invalid thread id"""
				self._async_raise(self.rtpThread.ident, SystemExit)
Exemplo n.º 9
0
    def makePacket(self, payload, frameSeq):
        version = 2
        padding = 0
        extension = 0
        CC = 0
        marker = 0
        PT = 26
        seqNum = frameSeq
        SSRC = 0

        # Create and encode the RTP packet
        # ...
        rtpPacket = RtpPacket()
        rtpPacket.encode(version, padding, extension, CC, seqNum, marker, PT, SSRC, payload)

        # Return the RTP packet
        # ...
        return rtpPacket.getPacket()
Exemplo n.º 10
0
 def SendRTPPacket(self, TheData, WhetherFirst, TheDataSequence):
     '''
     描述:将一个数据打包成RTP包,然后发送出去
     参数:数据,是否第一个,seq
     返回:无
     '''
     ThePacket = RtpPacket()
     if WhetherFirst:
         TheMarker = 0
     else:
         TheMarker = 1
     ThePacket.encode(Constants.RTP_CURRENT_VERSION, Constants.RTP_PADDLING_FALSE, Constants.RTP_EXTENSION_FALSE, \
     Constants.RTP_CC, TheDataSequence, TheMarker, Constants.RTP_TYPE_JPEG, Constants.RTP_SSRC ,\
     TheData)
     TheSendData = ThePacket.getPacket()
     try:
         self.DataSocket.sendto(TheSendData,(self.ClientIP, self.ClientDataPort))
     except:
         donothing = True
     return
Exemplo n.º 11
0
	def sendRtp(self):
		while True:
			if self.sendRtpThread.isSet(): break
			time.sleep(0.05)# pause for 50 milliseconds
			try:
				vidata=self.videoStream.nextFrame()
				if vidata:
					rtpp=RtpPacket()
					rtpp.encode(2,0,0,0,self.videoStream.frameNbr(),0,26,6,vidata)
					self.rtpSocket.sendto(rtpp.getPacket(),(self.clientAddr,self.rtpPort))
				else:
					printLogToConsole("end of stream")
					self.sendRtpThread.set()
					self.rtpSocket.sendto(RTSPVERSION+' '+RESPONSE_OK_END+MESSAGESEP+"TotalFrame: "+str(self.videoStream.frameNbr())+MESSAGESEP+"Session: "+str(self.csession),(self.clientAddr,self.rtpPort))
					try:
						self.videoStream.file.close()
					except: printLogToConsole("close file error")
					break
			except:
				print "\n"
				traceback.print_exc(file=sys.stdout)
	def makeRtp(self, payload, frameNbr):
		"""RTP-packetize the video data."""
		#-------------
		# TO COMPLETE
		#-------------
                # Set the fields
		# ...
		V = 2
		P = 0
		X = 0
		CC = 0
		M = 0
		PT = 26
		seqNum = frameNbr
		SSRC = 0

                # Create and encode the RTP packet	
	        # ...	
                rtpPacket = RtpPacket()
                rtpPacket.encode(V, P, X, CC, seqNum, M, PT, SSRC, payload)

                # Return the RTP packet
	        # ...
	        return rtpPacket.getPacket()
Exemplo n.º 13
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.º 14
0
    def makeRtp(self, payload, frameNbr):
        """RTP-packetize the video data."""
        #-------------
        # TO COMPLETE
        #-------------
        # Set the fields
        # ...
        V = 2
        P = 0
        X = 0
        CC = 0
        M = 0
        PT = 26
        seqNum = frameNbr
        SSRC = 0

        # Create and encode the RTP packet
        # ...
        rtpPacket = RtpPacket()
        rtpPacket.encode(V, P, X, CC, seqNum, M, PT, SSRC, payload)

        # Return the RTP packet
        # ...
        return rtpPacket.getPacket()
Exemplo n.º 15
0
    def sendRtp(self, i):
        while True:
            if self.clients[i][
                    'sending'] and not self.clients[i]['buffer_full']:
                try:
                    start_pos = self.clients[i]['start_pos']

                    # two conditions: specified start position or not
                    if start_pos is not None:
                        data, frame_no = self.clients[i][
                            'video_extractor'].captureFrame(start_pos)
                        audio_data, audio_frame_no = self.clients[i][
                            'audio_extractor'].captureFrame(start_pos)
                        self.clients[i]['start_pos'] = None
                    else:
                        data, frame_no = self.clients[i][
                            'video_extractor'].captureFrame()
                        audio_data, audio_frame_no = self.clients[i][
                            'audio_extractor'].captureFrame()

                    if self.clients[i][
                            'subtitle_file'] is not None and self.clients[i][
                                'subtitle'] is not None:
                        if frame_no in self.clients[i][
                                'subtitle'].frame2subtitle.keys():
                            subtitle = self.clients[i][
                                'subtitle'].frame2subtitle[frame_no]
                        else:
                            subtitle = None

                    # if video or audio fails to extract, send nothing
                    if frame_no != -1 and audio_frame_no != -1:

                        # send video packet
                        rtpPacket = RtpPacket()
                        length = len(data)
                        start = 0

                        # split into smaller packets
                        while start + self.packet_size < length:
                            this_data = data[start:start + self.packet_size]
                            rtpPacket.encode(2, 0, 0, 0, frame_no, 0, 26, 0,
                                             this_data)
                            self.sendPacket(rtpPacket, i)
                            time.sleep(0.01)  # wait for 0.01 second
                            start += self.packet_size
                        this_data = data[start:length]
                        rtpPacket.encode(2, 0, 0, 0, frame_no, 0, 26, 0,
                                         this_data)
                        self.sendPacket(rtpPacket, i)

                        # an empty packet to notify the end
                        if frame_no == self.clients[i][
                                'video_extractor'].frame_count - 1:
                            rtpPacket = RtpPacket()
                            rtpPacket.encode(2, 0, 0, 0, frame_no + 1, 0, 26,
                                             0, b'')
                            self.sendPacket(rtpPacket, i)

                        time.sleep(0.01)  # wait for 0.01 second

                        # send audio packet
                        audio_packet = RtpPacket()
                        audio_packet.encode(2, 0, 0, 0, audio_frame_no, 0, 10,
                                            0, audio_data)
                        self.sendPacket(audio_packet, i)

                        time.sleep(0.01)  # wait for 0.01 second

                        # send subtitle text packet
                        if self.clients[i]['subtitle_file'] is not None:
                            if subtitle is not None:
                                subtitle_packet = RtpPacket()
                                subtitle_packet.encode(2, 0, 0, 0, frame_no,
                                                       0, 37, 0,
                                                       subtitle.encode())
                                self.sendPacket(subtitle_packet, i)

                        self.clients[i]['frame_num'] = frame_no + 1
                except Exception as e:
                    print(str(e))
                    break
            elif self.clients[i]['video_extractor'] is None:
                break
        print("got out of rtp thread")
Exemplo n.º 16
0
    def pack_rtp_pkt(self, data, seqnum):
        """Packetize picture data into RTP packet"""
        rtppkt = RtpPacket()
        rtppkt.encode(2, 0, 0, 0, seqnum, 0, 26, 0, data)

        return rtppkt.getPacket()
Exemplo n.º 17
0
    def setPacket(self, frame, currentFrame):
        # set packet
        rtpPacket = RtpPacket()
        rtpPacket.encode(2, 0, 0, 0, currentFrame, 0, 26, 0, frame)

        return rtpPacket.getPacket()