博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建在线直播
阅读量:6932 次
发布时间:2019-06-27

本文共 3732 字,大约阅读时间需要 12 分钟。

技术选型

直播端:采用 ffmpeg 软件,对视频来源进行推流至服务器端或CDN

播放端:采用 Nginx 服务器解析,利用 nginx-rtmp-module 插件,对视频流进行播放,播放媒介采用 HLS

nginx-rtmp-module

插件地址:

进入 nginx 源码目录,重新编译,加入 rtmp 插件

./configure --add-module=/path/to/nginx-rtmp-module --with-http_ssl_module --with-debugmakemake install

至此,rtmp 模块就配置好了!

FFmpeg

是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

tar jxvf ffmpeg-3.0.tar.bz2cd ffmpeg-3.0./configure --enable-shared --prefix=/usr/local/ffmpeg --disable-yasmmake (10分钟左右)make install

查看依赖库是否缺失

ldd `which /usr/local/ffmpeg/bin/ffmpeglinux-vdso.so.1 =>  (0x00007ffeecbf7000)libavdevice.so.57 => not foundlibavfilter.so.6 => not foundlibavformat.so.57 => not foundlibavcodec.so.57 => not foundlibswresample.so.2 => not foundlibswscale.so.4 => not foundlibavutil.so.55 => not foundlibm.so.6 => /lib64/libm.so.6 (0x000000393a800000)libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003939c00000)libc.so.6 => /lib64/libc.so.6 (0x0000003939800000)/lib64/ld-linux-x86-64.so.2 (0x0000003939000000)

将一些依赖的库地址放进去

vim /etc/ld.so.conf/usr/local/ffmpeg/lib  //依赖库地址ldconfig //生效

Nginx配置

在原有的 nginx.conf 中加入如下配置

rtmp {        server {            listen 1935;            chunk_size 4000;                  #HLS            # For HLS to work please create a directory in tmpfs (/tmp/app here)          # for the fragments. The directory contents is served via HTTP (see          # http{} section in config)          #          # Incoming stream must be in H264/AAC. For iPhones use baseline H264          # profile (see ffmpeg example).          # This example creates RTMP stream from movie ready for HLS:          #          # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264           #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1           #    -f flv rtmp://localhost:1935/hls/movie          #          # If you need to transcode live stream use 'exec' feature.          #          application hls {              live on;              hls on;              hls_path /usr/local/nginx/html/hls; //你的 nginx 的 html 目录             hls_fragment 5s;          }      }  }

http 指令里,加入以下代码

server {        listen  8081;      location /hls {          # Serve HLS fragments          types {              application/vnd.apple.mpegurl m3u8;              video/mp2t ts;          }          root html;          expires -1;      }  }

重启 Nginx,让配置生效!

netstat -nlp,查看端口占用情况看看 rtmp 服务和 hls 服务的端口 1935 和 8081 是否都打开了。

开始直播了

接下来,看 rtmp 源的配置

ffmpeg -re -i sample.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost/hls/mystream

根据 nginx.conf 中的 hls_path 配置,这个命令会向192.168.0.1主机的 /usr/local/nginx/html/hls 下面写入ts片段和m3u8文件,参见下面

-rw-r--r-- 1 nobody nobody 1029300 03-08 18:06 mystream-70.ts-rw-r--r-- 1 nobody nobody 940564 03-08 18:06 mystream-71.ts-rw-r--r-- 1 nobody nobody 1758928 03-08 18:06 mystream-72.ts-rw-r--r-- 1 nobody nobody 912552 03-08 18:06 mystream-73.ts-rw-r--r-- 1 nobody nobody 1279340 03-08 18:07 mystream-74.ts-rw-r--r-- 1 nobody nobody 1148116 03-08 18:07 mystream-75.ts-rw-r--r-- 1 nobody nobody 960304 03-08 18:07 mystream-76.ts-rw-r--r-- 1 nobody nobody 2623728 03-08 18:07 mystream-77.ts-rw-r--r-- 1 nobody nobody 257 03-08 18:07 mystream.m3u8

这个目录下的文件会动态刷新,前面写入的 ts 片段会被后面的 ts 片段覆盖。当这个直播流播完后,所有相关的 ts 片段和 m3u8 文件都将被删除。

HLS

HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime XiPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

对比:HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

此协议详细内容请参考apple官方网站:

HLS Player

图片描述

play.html

在线观看

图片描述

转载地址:http://wqmjl.baihongyu.com/

你可能感兴趣的文章
dede留言板BUG解决
查看>>
React Fiber源码分析 第一篇
查看>>
10、K最近邻算法
查看>>
laravel入门-01
查看>>
类名:IExternalCommandAvailability+IExternalCommand实现对某些控件的自定义使用
查看>>
Elasticsearch的安装和使用
查看>>
Ajax简介
查看>>
java网络编程笔记
查看>>
结对作业:迷宫小游戏
查看>>
ethereumjs/ethereumjs-icap
查看>>
升级到Windows10
查看>>
转换数据库连接池为hikaricp
查看>>
第二次作业+105032014065
查看>>
KMP算法(C++版)
查看>>
九章算术卷第七 盈不足
查看>>
CCF201403-2 窗口(100分)
查看>>
关于物资管理系统
查看>>
面试题
查看>>
Html5_新标签兼容性问题
查看>>
JavaScript原型,原型链 ? 有什么特点? JavaScript如何实现继承?
查看>>