实时摄像头流传输(直播)

主要是给自己这两周折腾的东西收尾一下,踩了很多坑,比如用ffmpeg推流、自己配置nginx-rtmp环境等,没必要而且很容易出错。

前提知识

需要学习docker的简单使用,b站狂神,质量非常高。(别看写的java,我是python主语言的,也可以看)【狂神说Java】Docker进阶篇超详细版教程通俗易懂_哔哩哔哩_bilibili

需要学习网络相关的知识。比如ip地址的类型。

我们要做的事情分成两部分,推流和拉流。

推流

推流又分成两部分,一个是构建一个代理端口并配置一下,我主要是参考了

Docker简易搭建个人直播流rtmp服务器总结_二少爷的博客的博客-CSDN博客_docker搭建直播服务器

docker 搭建nginx-rtmp_司马懿的西山居-CSDN博客_docker nginx rtmp

两篇推文。注意需要配置好文件才能,可以参考第二篇推文里给的那个配置文件(因为我没花时间学nginx,不太看懂的)

sudo docker run -d --name rtmp -p 1935:1935 -p 8080:8080 -v ~/Documents/nginx-1.19.2/conf/nginx.conf:/etc/nginx/nginx.conf alqutami/rtmp-hls

以上需要安装在你的服务器上!!!!

完成以上步骤后,rtmp://你的服务器ip地址:1935/live/,就是我们要推流的地址了

另一个是把流推送到推流地址

在你设备端(比如电脑的前置摄像头、usb摄像头)所在的电脑,安装obs。(ffmpeg推流学习成本太高了)。如果是ip摄像头,好像是可以直接推流,只需要处理拉流的问题。

obs设置画面和声音非常方便,点点点就行了

唯一的问题是,要注意设置里,填写上面我们得到的推流地址(这步可能会卡在防火墙之类的问题上,要检查一下配置问题)。串流密钥,随便填写就行了,也可以不填。192是局域网,只有局域网内的设备可以拉流,如果想在公网拉就要127之前的ip地址。

实时摄像头流传输(直播)

然后点击开始推流,推流的步骤就好了。

实时摄像头流传输(直播)

 

拉流

拉流因为我的需求要放到服务器上跑一个实时深度学习项目,我还没有完全搞定

目前试了一下python的cv2。大家参考一下就好。

import cv2
import  time

def test():
    '''
   调用摄像头,捕捉图像
   '''

    url = 'rtmp://192.168.3.120:1935/live'
    cap = cv2.VideoCapture(url)
    
    #读取摄像头,0表示系统默认摄像头
#     cap = cv2.VideoCapture(0)
    while True:
        #读取图像
        ret,photo=cap.read()
        #将图像传送至窗口
        cv2.imshow('Please Take Your Photo!!',photo)
        
        #设置等待时间,若数字为0则图像定格
        key=cv2.waitKey(0.1)
        #按空格获取图像
        if key==ord(" "):
            #以当前时间存储
            filename = time.strftime('%Y%m%d-%H%M%S') + ".jpg"
            #保存位置
            cv2.imwrite(filename,photo)
        #按“q”退出程序
        if key==ord("q"):
            cap.release()
            break
            pass
        
        
test()

上一篇:nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求


下一篇:RTMP流工具包librtmp1解析学习