Python進(jìn)行ffmpeg推流和拉流rtsp、rtmp實(shí)例詳解
前言
流媒體協(xié)議,英文學(xué)名Streaming Protocol,用一句人話來(lái)解釋:流媒體協(xié)議是一種用于通過(guò) Web 傳遞多媒體的協(xié)議。傳統(tǒng)視頻流協(xié)議:RTMP和RTSP,其中 RTMP 是基于 TCP 開發(fā)的,那么 RTSP 使用到了 UDP 。
1.RTMP(Real Time Messaging Protocol,實(shí)時(shí)消息協(xié)議)
- 底層協(xié)議:TCP
- 視頻編解碼器:H.264
- 音頻編解碼器:AAC
- 延遲:3 - 30 秒
RTMP 的最大優(yōu)點(diǎn)是可以在服務(wù)器和客戶端服務(wù)器之間保持穩(wěn)定的連接,無(wú)論用戶的互聯(lián)網(wǎng)連接質(zhì)量如何,它都可以無(wú)縫低延遲進(jìn)行流媒體傳輸。這個(gè)技術(shù)主要通過(guò)將數(shù)據(jù)流分成相等的小部分(音頻數(shù)據(jù)默認(rèn)為 64 字節(jié),視頻數(shù)據(jù)默認(rèn)為 128 字節(jié))并將它們順序傳輸?shù)浇邮赵O(shè)備,然后將它們重新組合成視頻流來(lái)實(shí)現(xiàn)的。
RTMP 工作原理 ?
- 攝像頭捕獲視頻
- 通過(guò)編碼器將視頻流傳輸?shù)揭曨l平臺(tái)服務(wù)器
- 視頻平臺(tái)處理視頻流
- 通過(guò)CDN分發(fā)到離用戶最近的服務(wù)器上
- 最后視頻流就能成功的到達(dá)用戶設(shè)備
那么這個(gè)環(huán)節(jié)中RTMP就起到了非常重要的作用,在視頻從攝像頭到服務(wù)器的過(guò)程中,RTMP將大量數(shù)據(jù)分割成小塊并跨多個(gè)虛擬通道傳輸,在視頻源和 RTMP 服務(wù)器之間提供了穩(wěn)定和流暢的視頻流。
2.RTSP(Real Time Streaming Protocol,實(shí)時(shí)流協(xié)議)
- 底層協(xié)議:TCP 和 UDP
- 視頻編解碼器:H.265
- 音頻編解碼器:AAC
- 延遲:2 秒
RTSP 工作原理 ?
- 用戶設(shè)備向視頻流平臺(tái)發(fā)送 RTSP 請(qǐng)求
- 視頻流平臺(tái)返回可以操作的請(qǐng)求列表,比如播放、暫停等
- 用戶設(shè)備向視頻流平臺(tái)發(fā)送具體的請(qǐng)求,比如播放
- 視頻流平臺(tái)解析請(qǐng)求并調(diào)用指定機(jī)制啟動(dòng)視頻流處理
由于 RTSP 依賴于專用服務(wù)器,并且依賴于 RTP,因此該協(xié)議不支持加密視頻內(nèi)容或重傳丟失的數(shù)據(jù)包。
3.FFmpeg
FFmpeg 是一款用于多媒體處理的自由軟件工具,基于 GPL 許可證發(fā)布。FFmpeg 提供的最核心的命令行工具是 “ffmpeg”,“ffmpeg” 命令行工具的主要特征是輸出過(guò)程快、輸出品質(zhì)高、輸出文件小。“FFmpeg” 中 “FF” 表示 “Fast Forward”,“mpeg” 表示 “Moving Pictures Experts Group”。
FFmpeg 提供如下四個(gè)命令行工具:
- ffmpeg 音視頻編碼器/解碼器
- ffplay 媒體播放器
- ffprobe 顯示媒體文件信息
- ffserver 多媒體流廣播服務(wù)器,使用 HTTP 和 RTSP 協(xié)議。FFmpeg 4.1 版本已經(jīng)刪除 ffserver,新的替代者還未添加進(jìn)來(lái)。
命令行實(shí)現(xiàn):(和VLC工具等效)
ffmpeg推流rtsp
ffmpeg -re -i 1.mp4 -vcodec copy -codec copy -f rtsp rtsp://127.0.0.1:554/stream
推攝像頭視頻
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport udp -f rtsp rtsp://127.0.0.1/stream
ffplay拉流播放
ffplay rtsp://127.0.0.1:554/stream
4.python實(shí)現(xiàn)ffmpge的rtsp和rtmp推流拉流(待更)
# 本地?cái)z像頭推流 import queue import threading import cv2 import subprocess as sp # 自行設(shè)置,url為推送的服務(wù)器地址 rtmpUrl = "rtmp://localhost:1935/live/test" cap = cv2.VideoCapture(0) fps = int(cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # ffmpeg command command = ['ffmpeg', '-y', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-pix_fmt', 'bgr24', '-s', "{}x{}".format(width, height), '-r', str(fps), '-i', '-', '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-preset', 'ultrafast', '-f', 'flv', rtmpUrl] # 設(shè)置管道 p = sp.Popen(command, stdin=sp.PIPE) while True: ret, frame = cap.read() p.stdin.write(frame.tostring())
總結(jié)
到此這篇關(guān)于Python進(jìn)行ffmpeg推流和拉流rtsp、rtmp的文章就介紹到這了,更多相關(guān)Python ffmpeg推流和拉流rtsp rtmp內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python通過(guò)socket實(shí)現(xiàn)多個(gè)連接并實(shí)現(xiàn)ssh功能詳解
這篇文章主要介紹了python通過(guò)socket實(shí)現(xiàn)多個(gè)連接并實(shí)現(xiàn)ssh功能詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī)
這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12基于Python實(shí)現(xiàn)中秋佳節(jié)月餅搶購(gòu)腳本
這篇文章主要介紹了Python版中秋佳節(jié)月餅搶購(gòu)腳本,今天要用的是一個(gè)測(cè)試工具的庫(kù)Selenium,今天我們就是用它去實(shí)現(xiàn)自動(dòng)化搶購(gòu)月餅,其實(shí)就是用這個(gè)工具"模擬"人為操作瀏覽器相應(yīng)的操作,比如登陸,勾選購(gòu)物車商品,下單購(gòu)買等等操作,需要的朋友可以參考下2022-09-09Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04python如何使用雙線性插值計(jì)算網(wǎng)格內(nèi)數(shù)據(jù)
這篇文章主要介紹了python如何使用雙線性插值計(jì)算網(wǎng)格內(nèi)數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08在Python的Flask框架下使用sqlalchemy庫(kù)的簡(jiǎn)單教程
這篇文章主要介紹了在Python的Flask框架下使用sqlalchemy庫(kù)的簡(jiǎn)單教程,用來(lái)簡(jiǎn)潔地連接與操作數(shù)據(jù)庫(kù),需要的朋友可以參考下2015-04-04