資源簡介
python 3.6 socket傳輸視頻 ,采用TCP傳輸的方式,實現服務器和客服端視頻傳輸

代碼片段和文件信息
import?socket
import?cv2
import?threading
import?struct
import?numpy
#TCP連接
#1. 客戶端連接端口后,首先發送需要協商的分辨率和幀數,以致能夠使傳輸“協議”一致
#2. 客戶端使用線程,對圖片進行收集
#3. 對收到的每一張圖片進行解碼,并利用OpenCV播放出來,即可實現C/S兩端實時視頻傳輸。
#4?利用服務器端打開端口8880,此時客戶端連接后,便可以在客戶端中捕獲到服務器端的視頻。
class?Camera_Connect_object:?????????????????????????????????????????#定義一個攝像頭類
?????def?__init__(selfD_addr_port=[““8880]):?????????????????????????#類的構造函數,當創建了這個類的實例時就會調用該方法
?????????self.resolution=[640480]??????????????????????????????????????#self?代表類的實例
?????????self.addr_port=D_addr_port?????????????????????????????????????#綁定的端口和ip
?????????self.src=888+15????????????????????????????????????????????????#雙方確定傳輸幀數,(888)為校驗值
?????????self.interval=0????????????????????????????????????????????????#圖片播放時間間隔
?????????self.img_fps=15????????????????????????????????????????????????#每秒傳輸多少幀數
?????def?Socket_Connect(self):
?????????self.client=socket.socket(socket.AF_INETsocket.SOCK_STREAM)?????????#?選擇TCP連接方式
?????????self.client.setsockopt(socket.SOL_SOCKETsocket.SO_REUSEADDR1)??????#?操作系統會在服務器socket被關閉或服務器進程終止后馬上釋放該服務器的端口,否則操作系統會保留幾分鐘該端口。
?????????self.client.connect(self.addr_port)???????????????????????????????????#連接對應的端口位置,包括IP和端口,傳輸給客戶端
?????????print(“IP?is?%s:%d“?%?(self.addr_port[0]self.addr_port[1]))??????????#輸入連接的IP和端口號
?????def?RT_Image(self):
?????????self.name=self.addr_port[0]+“?Camera“
?????????self.client.send(struct.pack(“lhh“?self.src?self.resolution[0]?self.resolution[1]))?????#按照格式打包發送幀數和分辨率
?????????while(1):
??????????????info=struct.unpack(“lhh“self.client.recv(8))??????????????????????????#將接收到的8位二進制解包
??????????????buf_size=info[0]???????????????????????????????????????????????????????#獲取讀的圖片總長度
??????????????if?buf_size:
??????????????????try:
??????????????????????self.buf=b““????????????????#代表bytes類型
??????????????????????temp_buf=self.buf
??????????????????????while(buf_size):????????????#讀取每一張圖片的長度
???????????????????????????temp_buf=self.client.recv(buf_size)
???????????????????????????buf_size-=len(temp_buf)
???????????????????????????self.buf+=temp_buf??????#獲取圖片
???????????????????????????data?=?numpy.fromstring(self.buf?dtype=‘uint8‘)????#按uint8轉換為圖像矩陣
???????????????????????????self.image?=?cv2.imdecode(data?1)??????????????????#圖像解碼
???????????????????????????cv2.imshow(self.name?self.image)???????????????????#展示圖片
??????????????????except:
?????????????????????pass;
??????????????????finally:
?????????????????????if(cv2.waitKey(10)==27):?????????????????#每10ms刷新一次圖片,按‘ESC’(27)退出
?????????????????????????self.client.close()
?????????????????????????cv2.destroyAllWindows()
?????????????????????????break
?????def?Get_Data(selfinterval):
?????????showThread=threading.Thread(target=self.RT_Image)
?????????showThread.start()
if?__name__?==?‘__main__‘:
?????camera=Camera_Connect_object()
?????camera.addr_port[0]=input(“Please?input?IP:“)
?????camera.addr_port=tuple(camera.addr_port)
?????camera.So
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3807??2018-05-13?17:05??SOCKET傳輸視頻\video_C.py
?????文件???????3605??2018-05-13?17:33??SOCKET傳輸視頻\video_S.py
?????目錄??????????0??2018-05-23?17:13??SOCKET傳輸視頻
-----------?---------??----------?-----??----
?????????????????7412????????????????????3
評論
共有 條評論