码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Win10 笔记本本地摄像头提供 Rtsp 视频流服务


    1. 安装 FFmpeg

    下载 FFmpeg 并配置环境,执行 ffmpeg -version 测试安装是否成功。

    2. 下载 EasyDarwin

    下载后解压到本地,双击 EasyDarwin.exe 执行,打开一个 cmd 启动服务端。
    浏览器搜索 http://127.0.0.1:10008/ 进入网页,则安装成功。

    3. 启动本地摄像头

    另打开一个 cmd,键入 ffmpeg -list_devices true -f dshow -i dummy 会打印本机的多媒体设备,找到 video,
    在这里插入图片描述
    则左边的就是相机设备的名字,譬如这里是:USB2.0 HD UVC WebCam;
    执行 ffmpeg -f dshow -i video="{你的 video 设备名字}" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://127.0.0.1/test;
    在推流列表中找到源地址:
    在这里插入图片描述

    4. 可视化

    下载 VLC,打开【播放】—【播放】—【网络】,粘贴地址,稍等一会儿即可。
    在这里插入图片描述

    5. Python 接收 RTSP 流

    import threading 
    import cv2 
    
    
    class RTSCapture(cv2.VideoCapture):
        _cur_frame = None 
        _reading = False 
        schemes = ["rtsp://", "rtmp://"]
    
        @staticmethod
        def create(url, *schemes):
            rtscap = RTSCapture(url)
            rtscap.frame_receiver = threading.Thread(target=rtscap.recv_frame, daemon=True)
            rtscap.schemes.extend(schemes)
    
            if isinstance(url, str) and url.startswith(tuple(rtscap.schemes)):
                rtscap._reading = True 
            elif isinstance(url, int):
                pass 
            return rtscap
        
        def isStarted(self):
            ok = self.isOpened()
            if ok and self._reading:
                ok = self.frame_receiver.is_alive()
            return ok 
        
        def recv_frame(self):
            while self._reading and self.isOpened():
                ok, frame = self.read()
                if not ok:
                    break 
                self._cur_frame = frame 
            self._reading = False 
        
        def read2(self):
            frame = self._cur_frame
            self._cur_frame = None 
            return frame is not None, frame 
    
        def start_read(self):
            self.frame_receiver.start()
            self.read_latest_frame = self.read2 if self._reading else self.read 
        
        def stop_read(self):
            self._reading = False 
            if self.frame_receiver.is_alive():
                self.frame_receiver.join()
    
    
    if __name__ == "__main__":
        rtscap = RTSCapture.create(url)
        rtscap.start_read()
        cnt = 0
        while rtscap.isStarted():
            ok, frame = rtscap.read_latest_frame()
            if frame is not None:
                cnt += 1
                if cnt < 1024: # 丢弃前 1024 帧
                    continue 
                cv2.imwrite("./temp.png", frame)
    
        rtscap.stop_read()
        rtscap.release() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
  • 相关阅读:
    anylogic 学习(3)—— 智能体相关操作
    pikachu---暴力破解(burpsuite)
    无限 debugger 能劝退 Spider Engineer 吗?原来我还没入门!
    计算机丢失msvcr110.dll解决办法,多种msvcr110.dll解决方法分享
    在银行外包如何自我提升
    大数据可视化BI分析工具Apache Superset实现公网远程访问
    测试环境要多少?从成本与效率说起
    三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码
    Unity开发bug记录100例子(第1例)——打包后shader失效或者bug
    表单识别(五)——票据识别-论文研读:基于深度学习的票据识别系统设计与实现,卞飞飞(上)
  • 原文地址:https://blog.csdn.net/WinerChopin/article/details/128051265
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号