Live Streaming Video Chat App using cv2 module of Python

Sri Raviteja
2 min readJun 8, 2021

Team : Summer_6_14
-Mohammed Adnan
-Prattipati Sri Raviteja
-Mohammed Awais Ahmed
-Saami Abdul Samad

SUMMER 2021— Task 03

Task Description 📄

📌 Create Live Streaming Video Chat App without voice using cv2 module of Python.

To create a Live Streaming Video Chat App using the cv2 module of Python, we have used the socket programming to connect the two ends of the network to connect to each other. There are two key nodes here:

  • The Sender(Server)
  • The Receiver(Client)

The Sender:

Importing the Libraries:

import socket
import cv2
import pickle
import struct
import imutils

Creating the Socket:

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host_name = socket.gethostname()
host_ip = socket.gethostbyname(host_name)
print('HOST IP:',host_ip)
port = 10050
socket_address = (host_ip,port)

Output: Host IP: <IP Address>

Binding & Listening the Socket

server_socket.bind(socket_address)server_socket.listen(5)
print("Listening @",socket_address)

Output: Listening @ <Host IP>, <Port>

Running and Streaming the Video:

while True:
client_socket,addr = server_socket.accept()
print('Connection from:',addr)
if client_socket:
vid = cv2.VideoCapture(0)

while(vid.isOpened()):
img,frame = vid.read()
a = pickle.dumps(frame)
message = struct.pack("Q",len(a))+a
client_socket.sendall(message)

cv2.imshow('Sending...',frame)
key = cv2.waitKey(10)
if key ==13:
client_socket.close()

The Receiver :

-Importing the same libraries as the Server Side

Connecting to the Socket:

client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host_ip = '<Host IP>'
port = <Port_No>

Streaming the Server Side Video:

while True:
while len(data) < payload_size:
packet = client_socket.recv(4*1024)
if not packet: break
data+=packet
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack("Q",packed_msg_size)[0]
while len(data) < msg_size:
data += client_socket.recv(4*1024)
frame_data = data[:msg_size]
data = data[msg_size:]
frame = pickle.loads(frame_data)
cv2.imshow("Receiving...",frame)
key = cv2.waitKey(10)
if key == 13:
break
client_socket.close()

The Output:

That’s all Folks!!

--

--