教你用树莓派和阿里云做一个在线直播服务

最近项目上自研了一个直播服务,让全国各地的人能通过客户端实时观看视频。技术原理和完成步骤简单分享在这里。

简单来讲,要完成这样一个直播服务,基本架构如下:

  1. 摄像头:用于采集视频信号。普通的 USB 摄像头即可。
  2. 树莓派:用于将视频信号转换成 rtmp 协议的推流,推送到阿里云直播中心。
  3. 阿里云直播中心:接收推流信号,并进行存储、转码、分发等。
  4. WEB 客户端:从阿里云直播中心拉取直播流,并播放。

上述每个环节都可以找到开源软件实现基本功能,但相对来说,直播中心的实际复杂度会远远高于其他模块。因此,直接采用 阿里云的直播服务 来承载最复杂的直播中心功能。

配置阿里云直播中心

首先,打开阿里云控制台,开通视频直播服务,然后按要求配置域名和 CDN,接着生成直播推流地址和播放地址。

开通视频直播需要实名认证和域名备案,这一步要耐心完成

记下 推流地址,接下来要把这个地址配置到树莓派,让树莓派读取摄像头推送直播信号

配置树莓派

这一步要确保树莓派上安装了 ffmpeg 软件。如果没有装,执行 sudo apt install ffmpeg 即可。

首先,取一个 USB 摄像头,插到树莓派上,然后执行 ls /dev,可以发现多了一个 /dev/video0 的视频设备,这是 USB 摄像头的设备文件。

然后,执行 ffmpeg 转码命令:

ffmpeg -i '/dev/video0' -vcodec libx264 -f flv -an 'rtmp://${PUSH_URL}'
  • -i '/dev/video0' 从 /dev/video0 设备读取视频流
  • -vcodec libx264 编码成 h246 格式(这个参数非常重要,因为 web 客户端只支持 h264 编码)
  • -f flv 视频流封装成 flv 格式
  • -an 去除音频流(不需要)
  • rtmp://${PUSH_URL} 直播信号推流地址,${PUSH_URL} 替换成上一节“配置阿里云直播中心”生成的推流地址

可以看到 FFmpeg 正常编码推送:

htop 一下观察 FFmpeg 资源消耗,可以发现 h264 编码还是比较耗 CPU 的。但其实只要重新编译 FFmpeg,加入树莓派硬件 h264 编码器 h264_omx 即可解决。

如果 USB 摄像头带麦克风,也可以音视频合成后推流,用 ffmpeg -i /dev/video0 -f alsa -i default:CARD=${AID} -ab 16 -ar 22050 -ac 1 -f mp3 -f flv 'rtmp://${PUSH_URL}' 指令实现(arecord -L 获取音频设备 AID)。但这个指令解决不了音视频同步的问题,慎用。

播放

打开 树莓派直播测试页面,填入阿里云直播中心给出的 flv 播放地址,点击确定,就能看到 USB 摄像头传来的实时画面了。

有能力的话,也可以用 B 站的 H5 flv 播放器 bilibili/flv.js: HTML5 FLV Player 搭一个自己的 web 播放客户端。

扩展资料

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值