基于python實現(xiàn)高速視頻傳輸程序
今天要說的是一個高速視頻流的采集和傳輸?shù)膯栴},我不是研究這一塊的,沒有使用什么算法,僅僅是興趣導(dǎo)致我很想搞懂這個問題.
1,首先是視頻數(shù)據(jù)[攝像頭圖像]的采集,通??梢允褂胿fw在vc或者vb下實現(xiàn),這個庫我用的不好,所以一直不怎么會用.現(xiàn)在我們用到的是python的videocapture庫,這個庫用起來很簡單,如下:
from VideoCapture import Device cam = Device() cam.setResolution(320,240) #設(shè)置顯示分辨率 cam.saveSnapshot('demo.jpg') #抓取并保存圖片
這樣,你就得到了一張圖片.
當(dāng)然,要實現(xiàn)比較高速的采集,每次都要保存圖片是不大可能的,這樣弄下來每次采集一張圖片已經(jīng)接近1秒鐘,這個速度我們是無法忍受的.
更好的解決方式是直接這樣: im = cam.getImage(),
返回的是一個Image對象,是一個內(nèi)存塊,對它操作就快速多了.
2,如何傳輸圖片?我不知道pplive這種視頻是怎么傳輸?shù)?我的想法很簡單,每次傳送一幅圖片.
在本程序中,每次傳送的RGB圖像的大小為 160*120.這樣,需要的數(shù)據(jù)量為:
d = 160*120*3 = 56.25 kB
我選擇80000B.
下面是發(fā)送端代碼:
import socket import Image from VideoCapture import Device cam = Device() cam.setResolution(320,240) clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while 1: im = cam.getImage() im = im.resize((160,120)) da = im.tostring() clisocket.sendto(da, ("127.0.0.1", 1234)) s.close()
3,如何實時顯示圖片?
我使用了pygame作為實時圖像顯示界面,因為pygame是經(jīng)過優(yōu)化的高速圖形庫,不知道有沒有使用directshow,我想應(yīng)該用了吧..
關(guān)于pygame請參考 www.pygame.org
下面是接收端代碼:
import socket import Image import os,sys,pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((160,120)) pygame.display.set_caption("web cam") pygame.display.flip() svrsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) svrsocket.bind(("127.0.0.1", 1234)) clock = pygame.time.Clock() #計算幀速 while 1: data, address = svrsocket.recvfrom(80000) camshot = pygame.image.frombuffer(data, (160,120), "RGB") for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() screen.blit(camshot, (0,0)) pygame.display.update() print clock.get_fps() #在終端打印幀速 clock.tick()
程序終于完成了,測試一下效果怎么樣把,為了方便,我把客戶端和服務(wù)端都設(shè)成了本機(jī),端口為1234.
運行程序,哇,簡直不可思議,最高竟然達(dá)到230fps!(右邊的終端)
總結(jié)
以上所述是小編給大家介紹的基于python實現(xiàn)高速視頻傳輸程序,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
利用Python進(jìn)行微服務(wù)架構(gòu)的監(jiān)控與日志分析
Python作為一種強(qiáng)大的編程語言,提供了豐富的工具和庫,可以幫助我們實現(xiàn)對微服務(wù)架構(gòu)的監(jiān)控和日志分析,本文將介紹如何利用Python編寫監(jiān)控腳本和日志分析程序,以便于更好地管理和維護(hù)微服務(wù)系統(tǒng)2024-03-03python使用tkinter實現(xiàn)屏幕中間倒計時
這篇文章主要為大家詳細(xì)介紹了python使用tkinter實現(xiàn)屏幕中間倒計時,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03python中while和for的區(qū)別總結(jié)
在本篇內(nèi)容里小編給大家分享的是關(guān)于python中while和for的區(qū)別以及相關(guān)知識點,需要的朋友們可以學(xué)習(xí)下。2019-06-06Python使用pylab庫實現(xiàn)繪制直方圖功能示例
這篇文章主要介紹了Python使用pylab庫實現(xiàn)繪制直方圖功能,結(jié)合實例形式分析了Python數(shù)據(jù)讀取、遍歷以及基于pylab庫繪制直方圖的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06python回溯法實現(xiàn)數(shù)組全排列輸出實例分析
這篇文章主要介紹了python回溯法實現(xiàn)數(shù)組全排列輸出,以實例形式較為詳細(xì)的分析了全排列的定義及回溯法的實現(xiàn)技巧,需要的朋友可以參考下2015-03-03