ubuntu ffmpeg推流

本文介绍了在Ubuntu22.04上安装FFmpeg,使用rtsp服务器mediamtx,以及解决Python环境中的依赖问题。接着展示了如何使用OpenCV和FFmpeg进行RTSP视频流推送到本地服务器的步骤。
摘要由CSDN通过智能技术生成

ubuntu22安装下载并安装ffmpeg

ubuntu 安装ffmpeg_ubuntu安装ffmpeg_涂鸦c的博客-CSDN博客

下载rtsp服务器

Releases · bluenviron/mediamtx · GitHub

先运行服务器

./mediamtx

再运行

ffmpeg -re -i ./video1.mp4 -c:v copy -an -f rtsp rtsp://127.0.0.1:8554/test

 打开vlc播放器,进行测试

rtsp://127.0.0.1:8554/test

python ffmepg推流

Gtk-Message: 10:03:34.897: Failed to load module "canberra-gtk-module"

执行下面的命令:
          sudo apt-get install libcanberra-gtk-module

conda install -c conda-forge ffmpeg

报错

ImportError: /home/tuya/anaconda3/envs/torch/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /home/tuya/anaconda3/envs/torch/lib/libopencv_objdetect.so.408)
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6  /home/tuya/anaconda3/envs/torch/lib/libstdc++.so.6

安装的ffmpeg版本与python版本一致

import cv2
import subprocess as sp
rtspUrl = 'rtsp://127.0.0.1:8554/stream' #这里改成本地ip,端口号不变,文件夹自定义
#camera = cv2.VideoCapture('./video1.mp4') # 从文件读取视频
camera = cv2.VideoCapture('rtsp://admin:123456@192.168.123.104:554/stream1') # 从文件读取视频
# 视频属性
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)), int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
sizeStr = str(size[0]) + 'x' + str(size[1])
#sizeStr = '500x300'
fps = camera.get(cv2.CAP_PROP_FPS)  
fps = int(fps)
#fps = 30
'''
command = [
    'ffmpeg',
    '-re',#
    '-f', 'rawvideo', # 强制输入或输出文件格式
    '-vcodec','rawvideo', # 设置视频编解码器。这是-codec:v的别名
    '-pix_fmt', 'bgr24', # 设置像素格式
    '-s', sizeStr, # 设置图像大小
    '-r', str(fps), # 设置帧率
    '-i', '-', # 输入
    '-f', 'rtsp',# 强制输入或输出文件格式
    rtspUrl]'''
command = [
    'ffmpeg',
    '-re',#
    # '-y', # 无需询问即可覆盖输出文件
    '-f', 'rawvideo', # 强制输入或输出文件格式
    '-vcodec','rawvideo', # 设置视频编解码器。这是-codec:v的别名
    '-pix_fmt', 'bgr24', # 设置像素格式
    '-s', sizeStr, # 设置图像大小
    '-r', str(fps), # 设置帧率
    '-i', '-', # 输入
    #'-c:v', 'libx264',
    '-pix_fmt', 'yuv420p',
    #'-preset', 'ultrafast',
    '-f', 'rtsp',# 强制输入或输出文件格式
    rtspUrl]
#pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)
pipe = sp.Popen(command, stdin=sp.PIPE) #,shell=False
while (camera.isOpened()):
    ret, frame = camera.read() # 逐帧采集视频流
    #cv2.imshow("Video", frame)
    if frame is not None:
        cv2.imshow("Video", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        #frame = cv2.resize(frame, (500, 300), interpolation=cv2.INTER_LINEAR)
        pipe.stdin.write(frame.tostring())  # 存入管道用于直播
camera.release()
cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值