# Video-Stream-with-RTSP-and-RTP **Repository Path**: wangjc5736/Video-Stream-with-RTSP-and-RTP ## Basic Information - **Project Name**: Video-Stream-with-RTSP-and-RTP - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-31 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README How to: Example: Open a terminal: python Server.py 1025 Open another terminal: python ClientLauncher.py 127.0.0.1 1025 5008 video.mjpeg Start the server with the command line python Server.py server_port Where server_port is the port your server listens to for incoming RTSP connections # 1025 # Standard RTSP port is 554 # But need to choose a #port > 1024 Open a new terminal Start the client with the command line python ClientLauncher.py server_host server_port RTP_port video_file Where # server_host : the name of the machine where server is running (here "127.0.0.1") Use command line hostname to get the hostname(IP address,human readable hostname may not work) # server_port : port the server is listening on (here "1025") # RTP_port : port where the RTP packets are received (here "5008") # video_file : name of video file you want to request,here "video.mjpeg" @ file format Lab`s` proprietary MJPEG(Motion JPEG) format # The server streams a video which has been encoded into a proprietary MJPEG file format # This format stores the video as concatenated JPEG-encoded images # Each image being preceded by a 5-Byte header which indicates the bit size of the image # Server parses the bitstream of MJPEG file to extract the JPEG images # Server sends the images to client at periodic intervals # Client then displays the individual JPEG images sent from server @ Client # Send RTSP commands to server by pressing buttons: > RTSP(Real Time Streaming Protocol) * A network control protocol designed for use in entertainment and communications system to control streaming media servers * Used for establishing and controlling media sessions between end points * Clients issue VCR-style commands e.g play, pause .. to facilitate real-time control of playback of media files from server # Most RTSP servers use the RTP(Real-time Transport Protocol) in conjunction with RTCP(Real-time Control Protocol) for media stream delivery. # Commands > SETUP * Send SETUP request to the server * Insert Transport header(specify port for RTP data socket you just created) * RTP : Real-time Transport Protocol * Read server`s` response * Parse Session header(from response) to get RTSP Session ID * Create a datagram socket for receiving RTP data * Set timeout on socket to 0.5 seconds > PLAY * Send PLAY request * Insert Session header * Use the Session ID(returned in the SETUP response) * Not put the Transport header in the request * Read the Server`s` response > PAUSE * Send PAUSE request * Insert the Session header * Use the Session ID returned in the SETUP response * Not put the Transport header in this request * Read the server`s` response > TEARDOWN * Send TEARDOWN request * Insert the Session header * Use the Session ID returned in the SETUP response * Not put the Transport header in this request * Read the server`s` response *** Must insert CSeq header in every request you send Which starts at 1 and incremented by one for each request you send What we need to implement @ Client.py # SETUP function # PLAY function # PAUSE function # TEARDOWN function @ RtpPacket.py # Set the RTP-version filed(V) = 2 # Set padding(P), extension(X), # of contributing sources(CC), and marker(M) fields => all to 0 # Set payload type field(PT). we use MJPEG type, type number is 26 # Set sequence number.(frameNbr argument) # Set timestamp (via Python time module) # Set source identifier(SSRC)(identifies the server,pick an ID you like) # We have no other contributing sources(field CC == 0), the CSRC-field does not exist. The packet header is 12 bytes