基于python實(shí)現(xiàn)高速視頻傳輸程序
今天要說的是一個(gè)高速視頻流的采集和傳輸?shù)膯栴},我不是研究這一塊的,沒有使用什么算法,僅僅是興趣導(dǎo)致我很想搞懂這個(gè)問題.
1,首先是視頻數(shù)據(jù)[攝像頭圖像]的采集,通??梢允褂胿fw在vc或者vb下實(shí)現(xiàn),這個(gè)庫(kù)我用的不好,所以一直不怎么會(huì)用.現(xiàn)在我們用到的是python的videocapture庫(kù),這個(gè)庫(kù)用起來很簡(jiǎn)單,如下:
from VideoCapture import Device cam = Device() cam.setResolution(320,240) #設(shè)置顯示分辨率 cam.saveSnapshot('demo.jpg') #抓取并保存圖片
這樣,你就得到了一張圖片.
當(dāng)然,要實(shí)現(xiàn)比較高速的采集,每次都要保存圖片是不大可能的,這樣弄下來每次采集一張圖片已經(jīng)接近1秒鐘,這個(gè)速度我們是無法忍受的.
更好的解決方式是直接這樣: im = cam.getImage(),
返回的是一個(gè)Image對(duì)象,是一個(gè)內(nèi)存塊,對(duì)它操作就快速多了.
2,如何傳輸圖片?我不知道pplive這種視頻是怎么傳輸?shù)?我的想法很簡(jiǎn)單,每次傳送一幅圖片.
在本程序中,每次傳送的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,如何實(shí)時(shí)顯示圖片?
我使用了pygame作為實(shí)時(shí)圖像顯示界面,因?yàn)閜ygame是經(jīng)過優(yōu)化的高速圖形庫(kù),不知道有沒有使用directshow,我想應(yīng)該用了吧..
關(guān)于pygame請(qǐng)參考 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() #計(jì)算幀速 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()
程序終于完成了,測(cè)試一下效果怎么樣把,為了方便,我把客戶端和服務(wù)端都設(shè)成了本機(jī),端口為1234.
運(yùn)行程序,哇,簡(jiǎn)直不可思議,最高竟然達(dá)到230fps!(右邊的終端)
總結(jié)
以上所述是小編給大家介紹的基于python實(shí)現(xiàn)高速視頻傳輸程序,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
利用Python進(jìn)行微服務(wù)架構(gòu)的監(jiān)控與日志分析
Python作為一種強(qiáng)大的編程語(yǔ)言,提供了豐富的工具和庫(kù),可以幫助我們實(shí)現(xiàn)對(duì)微服務(wù)架構(gòu)的監(jiān)控和日志分析,本文將介紹如何利用Python編寫監(jiān)控腳本和日志分析程序,以便于更好地管理和維護(hù)微服務(wù)系統(tǒng)2024-03-03python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03Python 實(shí)現(xiàn)文件打包、上傳與校驗(yàn)的方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)文件打包、上傳與校驗(yàn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02python實(shí)現(xiàn)簡(jiǎn)易五子棋游戲(控制臺(tái)版)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05python中while和for的區(qū)別總結(jié)
在本篇內(nèi)容里小編給大家分享的是關(guān)于python中while和for的區(qū)別以及相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。2019-06-06Python處理Excel的14個(gè)常用操作總結(jié)
在數(shù)據(jù)處理和分析的領(lǐng)域中,Excel是一種被廣泛使用的工具,然而,通過Python處理Excel,能夠更好地實(shí)現(xiàn)自動(dòng)化和批量處理,本文為大家整理了14個(gè)Python處理Excel的常用操作,希望對(duì)大家有所幫助2023-12-12Python使用pylab庫(kù)實(shí)現(xiàn)繪制直方圖功能示例
這篇文章主要介紹了Python使用pylab庫(kù)實(shí)現(xiàn)繪制直方圖功能,結(jié)合實(shí)例形式分析了Python數(shù)據(jù)讀取、遍歷以及基于pylab庫(kù)繪制直方圖的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06python回溯法實(shí)現(xiàn)數(shù)組全排列輸出實(shí)例分析
這篇文章主要介紹了python回溯法實(shí)現(xiàn)數(shù)組全排列輸出,以實(shí)例形式較為詳細(xì)的分析了全排列的定義及回溯法的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03