【编程实践/嵌入式比赛】嵌入式比赛学习记录(三):基于TCP的视频流传输

0.前言

经过前面的实验,队长要求我使用opencv的camera作为摄像头来实现真正的视频流传输,因此本次实验我将讲述如何实现一个视频流的传输

附之前文章的链接:

【编程实践/嵌入式比赛】嵌入式比赛学习记录(一):TCP服务器和web界面的建立
【编程实践/嵌入式比赛】嵌入式比赛学习记录(二):基于TCP的图片流传输

1.视频流传输思想

我们提到视频,一般会想到帧的概念。从不严谨的角度来看,帧率就是指视频每秒刷新多少次。如果视频帧率是30,那么就是指1秒视频刷新30次。

因此我们可以将摄像头的视频截获下来,这样就是一张图片。通过刷新这样一张图片便可以视频流的形式展现。事实上很多网络IP摄像头就是通过传视频截获的帧来展示在前端的。

因此对于客户端(摄像头)而言,关键在于如何把视频帧进行编码传出去。而对于服务器端而言,则在于如何进行视频帧的解码。
大致的传输流程如下:
在这里插入图片描述
其中下位机部分暂且用一个单独进程来实现,摄像头使用opencv的camera,TCP client使用python socket实现。

2.摄像头部分

摄像头部分就是如之前所说,使用opencv来调用电脑的摄像头,模拟下位机的摄像头

另:貌似opencv的摄像头窗口大小只能选择预设的几个值,如果必须要自定义大小只能自己手动修改大小。

import cv2
#自定义模块
from MyClient import *
from MyImage import *

#TCP client,自己实现的类
client=TCPClient("192.168.71.1",5001)

def StartCamera():
    cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
    if not cap.isOpened():
        print("Camera error!")
        return
    fps=15
    #设置为640*480,帧率为15
    cap.set(3,height)
    cap.set(4,width)
    cap.set(cv2.CAP_PROP_FPS,fps)
    while 1:
        #截取帧
        ret,frame=cap.read()
        if not ret:
            print("Get frame error")
            break
        #print(frame.shape)
        #type:numpy.ndarray
        #shape(480,640,3)
        #翻转
        frame=cv2.flip(frame,180)

        '''调用TCP client的接口传输'''
        '''image_encode是图片编码'''
        client.send_data(image_encode(frame))

        time.sleep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值