IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Fedora进行ffmpeg+nginx+rtmp服务器配置局域网推流 -> 正文阅读

[系统运维]Fedora进行ffmpeg+nginx+rtmp服务器配置局域网推流

前言:

最近做的一个项目需要使用arm开发板调用摄像头获取图片数据发送到后端,由于开发板是fedora系统,所以踩了不少坑。特此记录下来。

一.先对Fedora镜像源进行一次更新

https://developer.aliyun.com/mirror/fedora

1.如果在配置好后,获取 GPG 密钥失败:[Errno 14] curl#37 - “Couldn’t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7”

https://blog.csdn.net/who__are__you_/article/details/82628390

2.如果安装包时出现:

$ dnf install xxx
$ Error: Failed to synchronize cache for repo

https://blog.csdn.net/l1175832366/article/details/104175396

3.如果运行sudo yum makecache生成缓存会报错:

执行以下命令:

sed -i 's/releases\/$releasever/releases\/32/g' /etc/yum.repos.d/fedora.repo
sed -i 's/updates\/$releasever/updates\/32/g' /etc/yum.repos.d/fedora-updates.repo

二.配置nginx和rtmp

https://blog.csdn.net/heng615975867/article/details/80519274
配置完成后,把下载目录里面的nginx-rtmp-module-master移到/usr/local/nginx中,因为可能没有移过去

三.配置FFmpeg

https://blog.csdn.net/weixin_30539625/article/details/98516616
安装完之后可能需要添加环境变量:

vim /etc/profile

添加一行

export PATH=/usr/local/ffmpeg/bin/:$PATH\

刷新环境

souce /etc/profile

四.在局域网内进行推流拉流

1.推流

将里面的地址修改成你要推流的地址

rtmpUrl = "rtmp://139.159.142.192:1935/live/1"

如果想要调用摄像头的参数设为0显示找不到摄像头,就参考下面的查找本机摄像头序号。因为我用的是AI开发板,所以直接输入0可能调用不了。

vid = cv2.VideoCapture(r"/usr/local/web/studey/mysite/chat/video/4.mp4")
import cv2
import queue
import os
import numpy as np
from threading import Thread
import datetime, _thread
import subprocess as sp
from time import  *
 
# 使用线程锁,防止线程死锁
mutex = _thread.allocate_lock()
# 存图片的队列
frame_queue = queue.Queue()
# 推流的地址,前端通过这个地址拉流,主机的IP,2019是ffmpeg在nginx中设置的端口号
rtmpUrl = "rtmp://139.159.142.192:1935/live/1"
 
# 用于推流的配置,参数比较多,可网上查询理解
command = ['ffmpeg',
           '-y',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', "{}x{}".format(640, 480),  # 图片分辨率
           '-r', str(25.0),  # 视频帧率
           '-i', '-',
           '-c:v', 'libx264',
           '-pix_fmt', 'yuv420p',
           '-preset', 'ultrafast',
           '-f', 'flv',
           rtmpUrl]
 
 
def Video():
    # 调用相机拍图的函数
    vid = cv2.VideoCapture(r"/usr/local/web/studey/mysite/chat/video/4.mp4")
    if not vid.isOpened():
        raise IOError("Couldn't open webcam or video")
    while (vid.isOpened()):
        return_value, frame = vid.read()
        # 原始图片推入队列中
        frame_queue.put(frame)
 
 
def push_frame():
    # 推流函数
    accum_time = 0
    curr_fps = 0
    fps = "FPS: ??"
    prev_time = time()
 
    # 防止多线程时 command 未被设置
    while True:
        if len(command) > 0:
            # 管道配置,其中用到管道
            p = sp.Popen(command, stdin=sp.PIPE)
            break
 
    while True:
        if frame_queue.empty() != True:
            # 从队列中取出图片
            frame = frame_queue.get()
            # curr_time = timer()
            # exec_time = curr_time - prev_time
            # prev_time = curr_time
            # accum_time = accum_time + exec_time
            # curr_fps = curr_fps + 1
 
            # process frame
            # 你处理图片的代码
            # 将图片从队列中取出来做处理,然后再通过管道推送到服务器上
            # 增加画面帧率
            # if accum_time > 1:
            # accum_time = accum_time - 1
            # fps = "FPS: " + str(curr_fps)
            # curr_fps = 0
 
            # write to pipe
            # 将处理后的图片通过管道推送到服务器上,image是处理后的图片
            p.stdin.write(frame.tostring())
 
 
def run():
    # 使用两个线程处理
    thread1 = Thread(target=Video, )
    thread1.start()
    thread2 = Thread(target=push_frame, )
    thread2.start()
 
if __name__ == '__main__':
    run()

2.拉流

拉流使用你的推流地址

vid = cv2.VideoCapture("你的推流地址")

3.查看链接摄像头号:

https://blog.csdn.net/weixin_44345862/article/details/91047938?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9F%A5%E7%9C%8B%E8%BF%9E%E6%8E%A5%E6%91%84%E5%83%8F%E5%A4%B4%E5%8F%B7&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-91047938.nonecase&spm=1018.2226.3001.4187

五.fedora进行opencv3.2配置

https://blog.csdn.net/keith_bb/article/details/54172899?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.tagcolumn&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.tagcolumn

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 16:04:59  更:2021-12-23 16:05:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:47:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码