树莓派使用 HLS 实现视频流直播
说明
这次介绍一下基于上一篇文章“树莓派编译安装 FFmpeg ”的应用,即 HLS 视频流直播。原理是 FFmpeg 将 USB 摄像头的原始视频流压缩为 H.264 视频流,然后使用 FFmpeg 的 hls 切片工具将视频流分为 n 个切片和 1 个 m3u8 文件,具体原理可以看这篇文章。
准备工作
树莓派一个(1 至 3 代都可以)
USB摄像头一个
已连接到网络
步骤
将树莓派接上 USB 摄像头,lsusb 命令可以查看摄像头型号等信息,同时 /dev 目录下会多出来一个 video0 设备。在树莓派中安装 Web 服务器,考虑到树莓派的性能,此次选用 nginx 。
sudo apt-get update
sudo apt-get install nginx
默认 nginx 的网站根目录是在 /var/www/html ,为了方便,我们可以把根目录改为 /var/www ,修改 /etc/nginx/sites-available 的 default 文件,将 root /var/www/html; 修改为 root /var/www; ,然后进入 /var/www 目录,将 html 文件夹内的 index.nginx-debian.html 移到此目录,然后重启 nginx 服务。
cd /var/www;
sudo mv html/index.nginx-debian.html index.html
sudo rm -r html
sudo service nginx restart
HLS 不断将视频切片,循环写入设定的 n 个文件,长时间的反复写入可能会造成 SD 卡损坏,因此最好划分一个 16M 的内存空间用于存放切片文件。在 /var/www 目录下创建 hls 文件夹,修改 /etc/fstab 文件,添加一项内容如下:
tmpfs /var/www/hls tmpfs defaults,size=16M 0 0
重启树莓派,输入 df -h 命令后可以看到已经如下所示,说明挂载 tmpfs 到 /var/www/hls 成功。
tmpfs 16M 0 16M 0% /var/www/hls
在当前目录即 /home/pi 创建 hls.sh 文件,写入以下内容,其中 -r 10 代表帧率为 10 ,-s 640x480 代表分辨率,-b:v 300k 代表视频码率,c:v h264_omx 代表使用树莓派的 omx 硬件编码器,-segment_time 2 代表每个切片 2 秒,-segment_wrap 3 代表切片数量为 3 ,-segment_list_size 3 代表缓冲文件数量为 3 ,最后将切片的文件放到 /var/www/hls 目录并生成 stream.m3u8 。
ffmpeg -f v4l2 -r 10 -s 640x480 -i /dev/video0 -b:v 300k -c:v h264_omx -an -f segment -segment_time 2 -segment_wrap 3 -segment_list_size 3 -segment_list "/var/www/hls/stream.m3u8" "/var/www/hls/stream%03d.ts"
执行 hls.sh
chmod +x hls.sh
./hls.sh
使用支持 html5 的浏览器就可以看到视频流的内容,链接为:树莓派IP/hls/stream.m3u8
总结
使用树莓派的硬件编码器的效果很明显,基本不占用 CPU 的使用率。而此次使用的 HLS 是目前 html5 中能直接使用的直播视频流协议,优点是穿透性好,有网络的情况下都可以使用,而缺点很明显,视频的延时是很大的,按上文的设置也有至少 6s 的延时。期待更加好用的 WebRTC 协议能尽快普及。
树莓派使用 HLS 实现视频流直播的更多相关文章
- 视频流协议HLS与RTMP 直播原理 点播原理
小结: 1.HLS原理 视频--->图像.声音分别编码打包切割容器文件ts,建立纯文本索引文件.m3u8--->播放器http下载容器文件.索引文件,播放,下载 基于HLS可以实现直播和点 ...
- [原创]直播服务器简单实现 http_flv和hls 内网直播桌面
直播都不陌生了,如今主流的协议分析的对比图,个人见解. 协议 httpflv rtmp hls dash 传输层 http流 tcp流 http http 视频格式 flv flv tag Ts文件 ...
- EasyNVR无插件播放HLS/RTMP网页直播方案前端完善:监听表单变动
在上一篇博客中我们表述完了防止提交成功后多余操作提交的一个过程:其中的精髓在于ajax的触发事件的使用. 而这篇博客主要想说明一下如何实时的判断出表单是否发生变化. 问题表述: 在网页前端的开发过程中 ...
- EasyHLS实现将IPCamera摄像机的RTSP流转成HLS(ts+m3u8)直播输出
本文转自:http://www.cnblogs.com/babosa/p/6033039.html EasyHLS EasyHLS是EasyDarwin开源流媒体团队开发的一款HLS打包库,接口非常简 ...
- 直播协议的选择:RTMP vs. HLS
文章转自:直播协议的选择:RTMP vs. HLS 前言 随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼.想要做一个直播业务,主要包括三 ...
- 普通摄像机也能做互联网HLS(m3u8)、RTMP、HTTP-FLV直播?是的,采用基于GBT28181协议的EasyGBS流媒体服务
在之前的一篇博客<EasyNVR和EasyDSS云平台联手都不能解决的事情,只有国标GB28181能解决了>我们介绍了很多应用场景里面,RTSP和RTMP直播协议都无法满足应用需求时,国标 ...
- (转)HLS协议,html5视频直播一站式扫盲
本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直播这么火,再不学就 ou ...
- 使用ffmpeg搭建HLS直播系统
[时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, ffmpeg,live,直播,点播, nginx, ssegment] 0 引言 本文作为HLS综述的后续文章. ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的视频直播录像、检索、回放方案
需求背景: 近期遇到客户反馈对于直播摄像机录像功能是有一定的需求点的,其实EasyDarwin团队早就研发出对应功能,只是用户对于产品没有足够了解,因此本篇将对录像功能来做一次介绍. 首先,录像就是对 ...
随机推荐
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- LaTex: 表格单元格内容 分行显示/换行
问题:如何同时让表格同一行一个单元格的文字能垂直居中?比如说文字超长超出页面范围需要分行显示 答:(来源于smth) 方案一: \newcommand{\tabincell}[2]{\begin{ta ...
- Android 自定义格式的对话框
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaoAAADvCAIAAAAsDwfKAAAgAElEQVR4nLy9bZhcVZUofEg0GcURBk ...
- apt-cyg update --2017-02-17 07:57:24-- http://mirrors.163.com/cygwin//x86_64/setup.bz2 正在解析主机 mirrors.163.com... 123.58.173.185, 123.58.173.186 正在连接 mirrors.163.com|123.58.173.185|:80... 已连接。 已发出 HTT
apt-cyg update ---- ::-- http://mirrors.163.com/cygwin//x86_64/setup.bz2 正在解析主机 mirrors.163.com... 1 ...
- Linux下修改Mysql最大并发连接数
输入的命令如下: /usr/local/mysql/bin/mysqladmin -uroot -pyyyyyy variables |grep max_connections nano /etc/m ...
- ActiveMQ (三) Spring整合JMS入门
Spring整合JMS入门 前提:安装好了ActiveMQ ActiveMQ安装 Demo结构: 生产者项目springjms_producer: pom.xml <?xml versio ...
- 关于Bundle对象的思考
在开发过程中,我们经常使用bundle对象来携带二进制数据,通过INTENT传递出去,那么BUNDLE对象到底是什么?其结构如何? 简要来说,bundle对象类似于一个map,内部是通过<key ...
- Java元注解,简单案例
[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...
- 吸收效果,像是在Mac上的垃圾桶的效果一样
#import "AppDelegate.h" #import <QuartzCore/QuartzCore.h> @interface AppDelegate () ...
- Entity Relationships
Entity Relationships: Here, you will learn how entity framework manages the relationships between en ...