实时视频传输_切割压缩、丢包统计
UDP实时视频传输
udp连接
原理:
在选择UDP作为传输协议时必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
在现场测控领域,面向的是分布化的控制器、监测器等,其应用场合环境比较恶劣,这样就对待传输数据提出了不同的要求,如实时、抗干扰性、安全性等。基于此,现场通信中,若某一应用要将一组数据传送给网络中的另一个节点,可由UDP进程将数据加上报头后传送给IP进程,UDP协议省去了建立连接和拆除连接的过程,取消了重发检验机制,能够达到较高的通信速率。
1.发送端1
2
3
4import threading
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
t = threading.Thread(target=mythread, args=(sock, string, ('192.168.201.106', 9999)))
2.接收端1
2
3
4
5
6import socket
import time
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('192.168.201.106', 9999))
data, addr = s.recvfrom(60000)
图像处理
旋转变换
1 | img = img.transpose(Image.ROTATE_180) |
这分别为图像旋转和左右翻转变换,我们拍到的视频是镜像翻转对称的,因此要进行以下处理,才能看到正像。
图像转Bytes
这个我找到了好几种方法:cv2转Image转bytes、cv2转np转bytes、
cv2转np转Image转bytes
1 | image = Image.fromarray(cv.cvtColor(frame, cv.COLOR_BGR2RGB)) |
cv2转np转bytes
1 | image = Image.fromarray(cv.cvtColor(frame, cv.COLOR_BGR2RGB)) |
pygame转bytes
1 | Img = pygame.image.load('/home/pi/实验/视频传输数据采集/test.jpg') |
Bytes转图片
Image
1 | img = Image.frombuffer("RGB", (160, 120), data)#, 'raw', "L", 0, 1 |
pygame
1 | img = pygame.image.frombuffer(data, (160, 120), "RGB") |
源码
- 发送端
1 | # coding:utf-8 |
- 接收端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#coding=utf-8
import socket
import time
import threading
import numpy as np
import cv2
from PIL import Image
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('192.168.201.106', 9999))
print('Waiting for connection...')
start = time.perf_counter()
while not False:
data, addr = s.recvfrom(60000)
if time.perf_counter() - start > 1:
start = time.perf_counter()
print('Received from %s:%s.' % addr)
img = Image.frombuffer("RGB", (160, 120), data)#, 'raw', "L", 0, 1
img = img.transpose(Image.ROTATE_180)
img = img.transpose(Image.FLIP_LEFT_RIGHT)
crop_im = cv2.cvtColor(np.array(img), cv2.COLOR_RGBA2BGRA)
cv2.imshow('UDP 视频传输',crop_im)
if cv2.waitKey(1) == 27: # 按下“ESC”退出
break
print('have received one frame')udp视频传输结果:
图片的切割与拼接
各种类型转bytes传输
对图片进行jpg压缩与还原
jpg压缩后的切割与传输
传输时延、丢包率
1 | auto lo |
sudo create_ap -n wlan0 car_wifi xmu20111 -c 1
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
ssid=”xmu201_1”
psk=”xmu20111”
key_mgmt=WPA-PSK
}
sudo nano /media/pi/rootfs/etc/network/interfaces
sudo nano /etc/network/interfaces
cd /media/pi/rootfs/etc/wpa_supplicant/
sudo nano /media/pi/rootfs/etc/dhcpcd.conf
sudo nano /etc/dhcpcd.conf
dhcp 域名解析
1 | sudo nano /etc/dhcpcd.conf |
您可以点击下方按钮切换对应评论系统。
GitHub Issues