树莓派3B+ /+ CSI摄像头 + FFmpeg + SRS 实现直播推流

2 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了如何使用树莓派3B+配合CSI摄像头实现推流直播,包括系统烧录、FFmpeg安装、SRS流媒体服务器搭建以及如何使用FFmpeg将视频推送到SRS服务器,以便远程拉取。作者提供了详细的步骤和参考资源。
摘要由CSDN通过智能技术生成

简介:

手头有一个树莓派3B+ 和一块CSI摄像头,想要实现一个推拉流直播的效果。

所需材料:开发板(我用的是树莓派3B+)、CIS摄像头、云服务器(用来搭建SRS服务器)

具体实现思路:

使用树莓派+CSI摄像头来做画面采集,然后使用FFmpeg推流到SRS云服务器上,然后用户可以拉取SRS服务器上的视频流。

具体步骤:

1.树莓派系统烧录

我之前用树莓派官方的烧录工具进行烧录,由于树莓派官方提供的镜像较新,存在的问题较多(可能是我比较菜吧)。比如对CSI摄像头的支持、以及不在支持raspistill和raspivid。所以我决定重新烧老一点的系统(我把我的树莓派镜像放到了下面)。

我的镜像是这个:2023-05-03-raspios-bullseye-armhf-full.img

镜像网盘地址:

链接:https://pan.baidu.com/s/1IgC4h5TGfSpd26QaNNqGKw?pwd=gk8a 
提取码:gk8a

推荐一个比较好的烧录工具

烧录工具网盘地址:

链接:https://pan.baidu.com/s/11bK0YVrZMx5EwDTbU-hIHA?pwd=81ik 
提取码:81ik

2.树莓派安装FFmpeg

树莓派是自带ffmpeg的,我们可以使用命令查看ffmpeg的版本:

ffmpeg -version

3.搭建SRS流媒体服务器

搭建SRS流媒体服务器需要用到云服务器,只有将SRS流媒体服务器搭建在云服务器上,才能让所有人都能拉取到你的视频流。如果你没有云服务器也没事,可以在开发板上搭建SRS流媒体的局域网服务器,在同一个局域网内的所有用户的是可以拉取到视频流的。如果开发板做了内网穿透,那么同样所有人都可以拉取视频流。

3.1 SRS流媒体服务器的搭建

搭建流媒体服务器查看我的另一篇文章:

http://t.csdnimg.cn/UJ3IV

4.使用FFmpeg推流到SRS服务器

4.1 查看video device0设备

ls -al /dev

你video0就是我们的CSI摄像头 

 

如果没有可以重新插一下摄像头,如果还是没有说明没有添加摄像头的驱动程序.ko文件和对应的raspiberry B3+的硬件使能 

sudo vim /etc/modules

然后添加这段话到最后一段

bcm2835-v4l2

修改Raspberry的启动配置使能项:

sudo raspi-config

然后重启,在查看是否存在video0  

参考教程:

树莓派摄像头使用教程 (spotpear.cn)

没问题的话就测试一下这个摄像头,看看能不能进行拍照截图

raspistill -o test.jpg

 4.2 FFmpeg推流

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2M -f flv rtmp://your_streaming_server_address

最后来看一下效果,我推流的是我自己电脑的画面

                拉流画面

我使用手机上的软件MX播放器进行拉流,这个软件在软件商店有可以直接下载

根据下面的提示拉流 

  • 47
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
qt是一种跨平台的开发框架,ffmpeg是一套音视频编解码的库,rtsp是一种用于传输音视频的协议。所以如果想要实现摄像头实时显示的功能,可以通过qt结合ffmpeg实现。 首先,我们需要使用ffmpeg来获取每个摄像头的rtsp并解码。可以使用ffmpeg提供的函数来打开rtsp并将其解码成原始的音视频数据。通过设置ffmpeg的参数,我们可以指定使用不同的摄像头,并可以同时从多个摄像头获取音视频数据。 接着,我们可以使用qt的图像显示控件来显示从摄像头解码得到的视频帧。可以使用qt提供的QGraphicsView、QLabel等控件,将视频帧数据转换成qt能够识别的格式并在界面上实时显示。 为了实现摄像头实时显示,我们可以在qt中使用多线程来同时处理多个摄像头的数据。可以为每个摄像头开启一个线程,用于获取该摄像头的rtsp并解码。然后将解码得到的视频帧数据通过线程间的通信机制传递给主线程,然后在主线程中更新界面并显示视频帧。 另外,为了提高实时性,我们可以对视频帧进行硬件加速处理,比如使用OpenGL进行渲染,这样可以减少CPU的使用率,提高视频的播放效果。 总结来说,实现qt与ffmpeg结合实现摄像头实时显示的功能,主要是通过ffmpeg获取rtsp并解码,然后通过qt的图像显示控件实时显示解码得到的视频帧,在多线程中同时处理多个摄像头的数据,最终实现摄像头实时显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值