Python進(jìn)行ffmpeg推流和拉流rtsp、rtmp實(shí)例詳解
前言
流媒體協(xié)議,英文學(xué)名Streaming Protocol,用一句人話來(lái)解釋:流媒體協(xié)議是一種用于通過(guò) Web 傳遞多媒體的協(xié)議。傳統(tǒng)視頻流協(xié)議:RTMP和RTSP,其中 RTMP 是基于 TCP 開(kāi)發(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)文章
快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程
這篇文章主要為大家介紹了Java開(kāi)發(fā)者如何快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12python爬取百度貼吧前1000頁(yè)內(nèi)容(requests庫(kù)面向?qū)ο笏枷雽?shí)現(xiàn))
這篇文章主要介紹了python爬取百度貼吧前1000頁(yè)內(nèi)容(requests庫(kù)面向?qū)ο笏枷雽?shí)現(xiàn)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python設(shè)計(jì)模式之迭代器模式原理與用法實(shí)例分析
這篇文章主要介紹了Python設(shè)計(jì)模式之迭代器模式原理與用法,結(jié)合具體實(shí)例形式分析了迭代器模式的概念、原理、定義及使用方法,代碼注釋說(shuō)明簡(jiǎn)單易懂,需要的朋友可以參考下2019-01-01Matlab常見(jiàn)最優(yōu)化方法的原理和深度分析
這篇文章主要介紹了Matlab常見(jiàn)最優(yōu)化方法的原理和深度分析,matlab只是個(gè)軟件,用來(lái)完成機(jī)械的計(jì)算,而如何安排這些計(jì)算,需要用戶掌握最基本的數(shù)學(xué)概念,需要的朋友可以參考下2023-07-07能讓你輕松的實(shí)現(xiàn)自然語(yǔ)言處理的5個(gè)Python庫(kù)
今天教大家如何你輕松的實(shí)現(xiàn)自然語(yǔ)言預(yù)處理,僅僅需要5個(gè)python庫(kù),文中介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05python版本坑:md5例子(python2與python3中md5區(qū)別)
這篇文章主要介紹了python版本坑:md5例子(python2與python3中md5區(qū)別),需要的朋友可以參考下2017-06-06