说明

这次介绍一下基于上一篇文章“树莓派编译安装 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 实现视频流直播的更多相关文章

  1. 视频流协议HLS与RTMP 直播原理 点播原理

    小结: 1.HLS原理 视频--->图像.声音分别编码打包切割容器文件ts,建立纯文本索引文件.m3u8--->播放器http下载容器文件.索引文件,播放,下载 基于HLS可以实现直播和点 ...

  2. [原创]直播服务器简单实现 http_flv和hls 内网直播桌面

    直播都不陌生了,如今主流的协议分析的对比图,个人见解. 协议 httpflv rtmp hls dash 传输层 http流 tcp流 http http 视频格式 flv flv tag Ts文件 ...

  3. EasyNVR无插件播放HLS/RTMP网页直播方案前端完善:监听表单变动

    在上一篇博客中我们表述完了防止提交成功后多余操作提交的一个过程:其中的精髓在于ajax的触发事件的使用. 而这篇博客主要想说明一下如何实时的判断出表单是否发生变化. 问题表述: 在网页前端的开发过程中 ...

  4. EasyHLS实现将IPCamera摄像机的RTSP流转成HLS(ts+m3u8)直播输出

    本文转自:http://www.cnblogs.com/babosa/p/6033039.html EasyHLS EasyHLS是EasyDarwin开源流媒体团队开发的一款HLS打包库,接口非常简 ...

  5. 直播协议的选择:RTMP vs. HLS

    文章转自:直播协议的选择:RTMP vs. HLS 前言 随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼.想要做一个直播业务,主要包括三 ...

  6. 普通摄像机也能做互联网HLS(m3u8)、RTMP、HTTP-FLV直播?是的,采用基于GBT28181协议的EasyGBS流媒体服务

    在之前的一篇博客<EasyNVR和EasyDSS云平台联手都不能解决的事情,只有国标GB28181能解决了>我们介绍了很多应用场景里面,RTSP和RTMP直播协议都无法满足应用需求时,国标 ...

  7. (转)HLS协议,html5视频直播一站式扫盲

    本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直播这么火,再不学就 ou ...

  8. 使用ffmpeg搭建HLS直播系统

    [时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, ffmpeg,live,直播,点播, nginx, ssegment] 0 引言 本文作为HLS综述的后续文章. ...

  9. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的视频直播录像、检索、回放方案

    需求背景: 近期遇到客户反馈对于直播摄像机录像功能是有一定的需求点的,其实EasyDarwin团队早就研发出对应功能,只是用户对于产品没有足够了解,因此本篇将对录像功能来做一次介绍. 首先,录像就是对 ...

随机推荐

  1. ABP系统设置

    代码分析 在abp中添加系统设置,都是在模块的预初始化方法中添加的. Configuration.Settings.Providers.Add<EmailSettingProvider>( ...

  2. C语言学习笔记--动态库和静态库的使用

    1.C语言中的链接器 (1)每个 C 语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件. (2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正 ...

  3. python之数据库的操作(课前准备)

    数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 上面的就是数据库的定义. 何为数据库,简单的来说,就是我们的大型数据的存放地点. 而我们学习的呢就是数据库的访问层的制作. 何为 ...

  4. ASP.NET MVC3 HtmlHelper用法大全

    HTML扩展类的所有方法都有2个参数:以textbox为例子public static string TextBox( this HtmlHelper htmlHelper, string name, ...

  5. 支撑矢量机SVM

    1.线性SVM 首先,回顾一下SVM问题的定义,如下: 线性约束很烦,不方便优化,是否有一种方法可以将线性约束放到优化问题本身,这样就可以无拘无束的优化,而不用考虑线性约束了.其对应的拉格朗日对偶形式 ...

  6. android tween动画和Frame动画总结

    tween  动画有四种 //透明度动画 AlphaAnimation aa = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity. ...

  7. 【总结整理】WebGIS学习-thinkGIS(二):关于level,比例尺scale,分辨率resolution

    1.Level包含了一个resolution参数和一个scale参数 瓦片本身: 我们用arcgis切完图后,打开发布的服务或者打开config.xml配置文件,可以看到所切之图的相关配置.如图所示: ...

  8. Windows cmd 将命令(/指令)写到一个文件里,直接运行这个文件。提高工作效率

    Windows cmd 批处理(cmd/bat)文件的简单使用介绍 前言 如果你想我一样,要每天都需要在cmd上,用键盘去敲击相同的命令,时间一长,你就觉得很无聊.有没有什么比较高效的方法,让我们不用 ...

  9. Conda / Miniconda——软件包管理系统使用

    conda是一个非常好的python包管理软件,但是它的Minicoda是一个非常好的生信软件包管理软件,更多conda介绍多google. Miniconda简直就是生信人的福音,尤其是像我这种传统 ...

  10. Luogu 3233 [HNOI2014]世界树

    BZOJ 3572 首先看出虚树,然后考虑如何$dp$. 我们先在处理出的虚树上$dp$一遍,处理出虚树上所有点距离最近的关键点(关键点一定在虚树上嘛). 具体来说,先搜一遍处理出每一个点的父亲到它的 ...