实时视频传输_切割压缩、丢包统计
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