vlc實現PC與樹莓派的視訊流傳輸
阿新 • • 發佈:2018-12-16
目錄
一、使用vlc實現PC與樹莓派之間的視訊流傳輸
(一)Windows
-
安裝下載vlc
裝的32位 本人用64位不ok -
使用vlc
開啟VLC
媒體--> 流--> 捕獲裝置-->
捕獲模式:DirectShow
適配裝置名稱:
音訊裝置名稱:
點選 串流 -->下一步
進入流輸出設定介面
新增UDP 輸入樹莓派ip
(二)樹莓派
使用team viewer 在樹莓派上安裝vlc:
sudo apt-get update
sudo apt-get install vlc
開啟vlc
接收推流程式碼:
udp://@(樹莓派地址):(埠號)
eg: udp://@192.168.43.247:1234
選擇電腦中的視訊檔案
二、樹莓派與Windows系統之間的聊天
-
檢視ip地址
開啟命令提示符cmd 用ipconfig檢視ip -
編寫程式碼
(1)windows上開啟
伺服器端:
import socket
host = '192.168.43.66'
port = 8090
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
sock,addr = s.accept()
print('Connection built...')
info = sock.recv(1024).decode()
while info != 'exit':
print('raspberry:'+info)
send_mes = input()
sock.send(send_mes.encode())
if send_mes =='exit' :
break
info = sock.recv(1024).decode()
sock.close()
s.close()
(2)樹莓派上
- 開始聊天
三、非堵塞方式傳輸影象/視訊檔案
- 伺服器端:
準備要傳輸的檔案
import socket
import os
import hashlib
server = socket.socket()
server.bind(("192.168.43.66",6969)) # 繫結監聽埠
server.listen(5) # 監聽
print("監聽開始..")
while True:
conn, addr = server.accept() # 等待連線
print("conn:", conn, "\naddr:", addr) # conn連線例項
while True:
data = conn.recv(1024) # 接收
if not data: # 客戶端已斷開
print("客戶端斷開連線")
break
print("收到的命令:", data.decode("utf-8"))
cmd, filename = data.decode("utf-8").split(" ")
if cmd =="get":
if os.path.isfile(filename): # 判斷檔案存在
# 1.先發送檔案大小,讓客戶端準備接收
size = os.stat(filename).st_size #獲取檔案大小
conn.send(str(size).encode("utf-8")) # 傳送資料長度
print("傳送的大小:", size)
# 2.傳送檔案內容
conn.recv(1024) # 接收確認
m = hashlib.md5()
f = open(filename, "rb")
for line in f:
conn.send(line) # 傳送資料
m.update(line)
f.close()
# 3.傳送md5值進行校驗
md5 = m.hexdigest()
conn.send(md5.encode("utf-8")) # 傳送md5值
print("md5:", md5)
server.close()
- 客戶端:
新建 Client2.py
# 客戶端
import socket
import os
import hashlib
client = socket.socket() # 生成socket連線物件
ip_port =("192.168.43.241", 6969) # 地址和埠號
client.connect(ip_port) # 連線
print("伺服器已連線")
while True:
content = input(">>")
if len(content)==0: continue # 如果傳入空字元會阻塞
if content.startswith("get"):
client.send(content.encode("utf-8")) # 傳送和接收都是bytes型別
# 1.先接收長度,建議8192
server_response = client.recv(1024)
file_size = int(server_response.decode("utf-8"))
print("接收到的大小:", file_size)
# 2.接收檔案內容
client.send("準備好接收".encode("utf-8")) # 接收確認
filename = "new" + content.split(" ")[1]
f = open(filename, "wb")
received_size = 0
m = hashlib.md5()
while received_size < file_size:
size = 0 # 準確接收資料大小,解決粘包
if file_size - received_size > 1024: # 多次接收
size = 1024
else: # 最後一次接收完畢
size = file_size - received_size
data = client.recv(size) # 多次接收內容,接收大資料
data_len = len(data)
received_size += data_len
print("已接收:", int(received_size/file_size*100), "%")
m.update(data)
f.write(data)
f.close()
print("實際接收的大小:", received_size) # 解碼
# 3.md5值校驗
md5_sever = client.recv(1024).decode("utf-8")
md5_client = m.hexdigest()
print("伺服器發來的md5:", md5_sever)
print("接收檔案的md5:", md5_client)
if md5_sever == md5_client:
print("MD5值校驗成功")
else:
print("MD5值校驗失敗")
client.close()
執行 連線成功 輸入get p11.png
檢視接收的檔案