电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮?/h1>
瀏覽:21日期:2022-06-21 13:08:25
1. 項(xiàng)目背景

視頻傳輸: 在一臺電腦上播放視頻(捕捉攝像頭畫面),同局域網(wǎng)內(nèi)另一臺電腦上實(shí)時(shí)播放,盡量不卡頓。

先放最后的照片,和用gif展示一下視頻效果。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

傳輸視頻可以采取圖片或者流的形式,本文采取傳輸圖片的形式,在1s之內(nèi)顯示多張圖片從而形成連續(xù)的視頻畫面。

經(jīng)費(fèi)有限,所有實(shí)驗(yàn)均基于筆記本電腦。

使用的視頻源是本機(jī)攝像頭,以及進(jìn)擊的巨人720p資源。

2. 解決方案

1. 使用Python的Socket,使用opencv捕捉攝像頭/視頻的畫面。

2. 原始的圖片很大(720p的大小是1920*1080*3),整圖就算壓縮成jpg格式其大小也非常大。而UDP最大只能傳輸65535字節(jié)大小的數(shù)據(jù)區(qū),故對圖片進(jìn)行分塊,分塊過后的數(shù)據(jù)壓縮成jpg格式,并對圖片分塊數(shù)據(jù)進(jìn)行編號。

3. 實(shí)驗(yàn)檢測表明,本文實(shí)驗(yàn)環(huán)境發(fā)送端不需要使用發(fā)送隊(duì)列,基本上新生成的幀很快就能被socket傳輸?shù)簟?/p>

4. 接收端使用多線程接收,每個(gè)線程是一個(gè)socket,接收過后的數(shù)據(jù)存儲于數(shù)據(jù)片池。

5. 接收端另開一個(gè)線程,用于反復(fù)從數(shù)據(jù)片池 讀取數(shù)據(jù)片,根據(jù)數(shù)據(jù)片的編號更新幕布,這里幕布是專門用于圖像顯示的一個(gè)數(shù)組,其維度是720p(1920*1080*3)。更新過后的結(jié)果暫存于圖片池

6. 主線程反復(fù)從圖片池讀取圖片,并顯示。

3. 實(shí)現(xiàn)細(xì)節(jié)3.1 TCP/UDP的選擇

為了實(shí)現(xiàn)低延遲,毫無疑問選取無連接的UDP傳輸。

3.2 圖片分片算法

這里其實(shí)也談不上什么算法,就是將圖片水平分割。這種做法的好處在于,分割后圖片的編號可以和區(qū)域一一對應(yīng)。本文沒有探索更為復(fù)雜的圖片分片算法。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

經(jīng)過處理,圖片變?yōu)橐粋€(gè)個(gè)分片,如下:

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

對上述圖片進(jìn)行編號,很顯然可以編號0,1,2,3,對于任意分塊(例如2)在圖像數(shù)組中對應(yīng)的區(qū)域是frame[2*piece_size:(2+1)*piece_size],其中piece_size表示一片數(shù)據(jù)的大小。

這種對應(yīng)關(guān)系方便解壓后的圖像還原操作。

3.3 JPG壓縮

這其實(shí)是個(gè)很小的技術(shù)點(diǎn),因?yàn)槭褂玫膲嚎s算法都是現(xiàn)成的。但是值得一提的是,JPG的壓縮率是真的高,在實(shí)驗(yàn)數(shù)據(jù)上實(shí)現(xiàn)了10-20倍的壓縮率。

使用了多線程壓縮,壓縮完過后,更新對應(yīng)的桶,這里的桶實(shí)際上就是數(shù)據(jù)片。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

由主線程Main Thread反復(fù)從桶里取數(shù)據(jù)片(t1),每取1片發(fā)送一次,然后再取下一片(t2),直到所有桶都被取了一次(例子中有10片)。

至此,一張圖片的分片數(shù)據(jù)被全部取完,于是開始統(tǒng)計(jì)一些FPS相關(guān)信息。

3.4 接收隊(duì)列

接收端開了10個(gè)線程用于異步socket接收數(shù)據(jù)片。

為了保證接收端產(chǎn)生絲滑的視頻效果,使用接收隊(duì)列是個(gè)不錯(cuò)的選擇。本文使用了2個(gè)隊(duì)列的設(shè)計(jì)。實(shí)現(xiàn)數(shù)據(jù)接收的二級緩沖。示意圖如下:

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

這樣一來,視頻效果明顯絲滑了很多。

4. 遇到的坑及解決辦法4.1. Windows防火墻

巨坑,最好都關(guān)了。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

4.2. 路由器網(wǎng)絡(luò)頻段

同一臺路由器的5G和2.4G頻段有時(shí)候不能互相ping通,要確保兩個(gè)電腦連接在同一頻段上。

4.3. Wifi配置

如果上述設(shè)置都對了,但是還是ping不通。將wifi連接設(shè)置成專用網(wǎng)絡(luò),也許就能解決問題。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

4.4. 硬件瓶頸

個(gè)人PC的性能是較大瓶頸,尤其是單機(jī)測驗(yàn)的時(shí)候(本地兩個(gè)終端,一個(gè)發(fā)送、一個(gè)接收),CPU使用率分分鐘到100%。聽某個(gè)技術(shù)大哥說要使用GPU壓縮。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

用兩臺電腦,一臺接收一臺發(fā)送之后,效果要好很多。

4.5. OpenCV讀取攝像頭大坑

由于攝像頭驅(qū)動的關(guān)系,在我的電腦上需要設(shè)置以下兩個(gè)變量,才能成功啟用外置的720p攝像頭。

os.environ['OPENCV_VIDEOIO_DEBUG'] = '1'os.environ['OPENCV_VIDEOIO_PRIORITY_MSMF'] = '0'

即使如此,如果不做額外的設(shè)置,讀出來的圖片將是480p的(看起來很像是720p被壓縮過后的)。所以如果要傳輸真·720p,還需要設(shè)置讀出的圖像大小,如下:

self.stream = cv2.VideoCapture(1) # 讀取第一個(gè)外置攝像頭self.stream.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # floatself.stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # float4.6. Socket卡頓

不知道是不是我寫的有問題,感覺多線程的socket會爭搶資源(發(fā)送和接收的線程間,對應(yīng)5.1節(jié)功能),造成接收端的畫面顯示將變得卡頓。

5. 尚未Bug Free的功能5.1 使用TCP回傳幀率信息

為了計(jì)算網(wǎng)絡(luò)時(shí)延,采取類似伽利略測光速的方法。從數(shù)據(jù)包打包之前,到對方收到數(shù)據(jù)包之后,再將這個(gè)數(shù)據(jù)回傳到發(fā)送方。

這樣就不存在兩臺機(jī)器時(shí)間差校準(zhǔn)的問題。

該算法的大致流程如下圖所示。

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=

這種計(jì)算方式應(yīng)該是自己的實(shí)驗(yàn)環(huán)境下比較準(zhǔn)確的方法了。

時(shí)延信息的反饋不需要特別快(比如200-500ms發(fā)送一次),所以使用TCP技術(shù)

其實(shí)TCP和UDP在使用Python編程的時(shí)候代碼差距可以說極小…

但是!!!

自己目前在實(shí)現(xiàn)信息回傳的時(shí)候,會莫名卡頓起來。

接收端建立回傳的socket之后,甚至還沒傳輸數(shù)據(jù),整個(gè)程序運(yùn)行起來就變得非常卡頓,這個(gè)讓我比較苦惱,目前正在找bug.

5.2 擁塞控制 (流量控制)的算法

這部分的思想是流量控制,感謝評論區(qū)指正。

5.1節(jié)如果一并回傳接收端隊(duì)列狀態(tài)信息。如果接收端隊(duì)列太滿,說明來不及處理視頻幀了,從而對發(fā)送端的發(fā)送速度進(jìn)行控制,才是“擁塞控制”

這個(gè)本來是想著和5.1綜合起來用的,已經(jīng)寫好了,但是還沒能真正展現(xiàn)價(jià)值,設(shè)計(jì)是否合理也值得商榷。

控制的是發(fā)送端的發(fā)送頻率,從而實(shí)現(xiàn)接收端的流暢播放

思想和TCP的擁塞控制一樣慢增長,快下降。如果接收端的隊(duì)列一直處于較空的狀態(tài),則表明還有一定的性能剩余,此時(shí)可以緩慢加快發(fā)送的頻率;如果檢測到接收端隊(duì)列中數(shù)據(jù)較多,表明發(fā)送速度太快來不及顯示,這時(shí)候就大幅下降發(fā)送的頻率。

這個(gè)擁塞控制的算法基于幾個(gè)假設(shè):

1.網(wǎng)絡(luò)情況良好,丟包率比較低;

2接收端電腦的性能足夠高,來得及處理解包、顯示圖像。

如果5.1能夠正確實(shí)現(xiàn),則應(yīng)該根據(jù)網(wǎng)絡(luò)時(shí)延Python使用UDP實(shí)現(xiàn)720p視頻傳輸?shù)牟僮? src=的大小來控制發(fā)送的頻率。

6. 總結(jié)

這個(gè)項(xiàng)目是一周的時(shí)間內(nèi)完成的,目前還有點(diǎn)bug。小組內(nèi)的成員分別在不同技術(shù)方向上進(jìn)行了探索,收獲都還挺大的。這篇博客就當(dāng)一個(gè)項(xiàng)目總結(jié)吧,寫的難免有紕漏之處。

github地址:https://github.com/820fans/UDP-Video-Transfer

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:

主站蜘蛛池模板: uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 飞象网 - 通信人每天必上的网站 全球化工设备网—化工设备,化工机械,制药设备,环保设备的专业网络市场。 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 滚筒线,链板线,总装线,流水线-上海体能机电有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 浙江清风侠环保设备有限公司| 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 |