模拟直播推流(ffmpeg、vlc)

举报
Higeeon 发表于 2019/07/29 17:06:24 2019/07/29
【摘要】 本文主要来自于一个目标——“通过ffmpeg模拟直播推流”。这个句子其实包含的内容很多,在标题中我们至少可以看到几个关键词——ffmpeg、直播、模拟推流。1)什么是ffmpegffmpeg是一套视频处理和存储等的技术方案,重点“开源”、“免费”,“最主流的视频处理技术方案”,“各大厂商基本上都用”。其他的内容可以通过本链接或者各大搜索引擎去了解。2)什么是直播估计你第一反应就是平台等里面的...

本文主要来自于一个目标——“通过ffmpeg模拟直播推流”。这个句子其实包含的内容很多,在标题中我们至少可以看到几个关键词——ffmpeg、直播、模拟推流。

1)什么是ffmpeg

ffmpeg是一套视频处理和存储等的技术方案,重点“开源”、“免费”,“最主流的视频处理技术方案”,“各大厂商基本上都用”。其他的内容可以通过本链接或者各大搜索引擎去了解。

2)什么是直播

估计你第一反应就是平台里面的直播。那就太狭义了。我对此的定义是(纯IT属性的简单粗暴)——始终播放最新的视频数据,不能拖动到指定位置进行播放;如果源不断,则不会停止。直播的范围就很广了,有常见的平台里面的那种直播,还有广电里的电视直播,当然视频安防监控,那种实时的画面也是直播。关于直播的相关内容,比如有哪些直播的传输技术方案,还是右转看链接或自己去搜索吧。

3)模拟推流

这里肯定有人会问,为啥要用模拟的。第一,总不能去各大网站去截取直播视频源吧,这种既不太合法,也不一定能拿到啊,想想防盗链。第二,如果视频源断了呢。so,求人不如求己,那就撸袖子开始搞吧,要啥视频源就自己找。当然模拟的就有个弊端,一般是通过点播,通过相应的技术进行模拟输出为直播,那就不可避免的点播的视频是有开始和结束的,换到直播上就是循环播放。好奇的小伙伴肯定会问,那某些视频大厂他们有些视频轮播(比如某部电视剧从第一集开始,一集集播,然后也不能拖动)他们不会用的是这种技术吧?呵呵,答案是当然不知道的,因为我也没有研究过。勤奋的小伙伴可以自己去挖掘下。当然,有些人想了解有什么模拟推流的方式,还是右转看链接或者自己去了解(知识总是留给勤奋的人)。

基础情况已经了解了,那接下去就是执行层面的事情。

image.png

 

1.环境背景

lz采用的是云上服务器,Linux版本,除了基础Nginx服务,其他啥也没有。so,本文也仅适用于Linux系统。

 

2.ffmpeg的安装

1)FFmpeg官网:http://www.ffmpeg.org

2)下载最新源码并解压(可以下载到任何位置)

  • wget http://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2

  • tar -zxvf ffmpeg-4.1.3.tar.bz2

3)安装ffmpeg

  • cd ffmpeg-4.1.3(进入到ffmpeg所在的文件下)

  • ./configure

4)安装yasm(适用于在3中报错,yasm not found...)

  • yum install yasm

  • 安装成功后,继续./configure

5)继续安装ffmpeg

  • make && make install

6)测试是否安装成功

  • ffmpeg 当出现类似如下时,则说明成功了。

image.png

 

2.尝试ffmpeg进行转码

1)先将某个点播视频源存入,这个处理方式就不说了吧...

2)如果不采用1)也可以将某直播视频源转存为点播,恰巧需要针对某个直播视频源进行处理,我采用的是这种方式:

  • ffmpeg -i 'http://***/6.hd.m3u8' -vcodec copy -acodec copy /***/a.mp4

3)尝试转码输出为指定格式(ffmpeg的指令说明可以看之前的文章介绍)

然后可能会报如下错误,此时需要进入【3】进行集成x264的库

3.安装x264

1)下载x264的库并安装

  • git clone git://git.videolan.org/x264.git

  • 到对应的路径下

  • ./configure --enable-static --enable-share

  • make && make install

2)重新编译ffmpeg

  • 到ffmpeg所在的文件夹下

  • ./configure --enable-gpl --enable-libx264

  • make clean

  • make && make install

操作后,就能正常的进行转码了。但是如果要指定rtmp输出,报了如下错误。如果没有如下错误则忽略。

image.png

4.安装Nginx和Nginx-rtmp-modle

由于已经自带Nginx,因此这里查询服务器的Nginx的版本,并下载相应版本的Nginx代码下来。

1)查看服务器Nginx的版本号

  • sbin/nginx -v

2)下载对应的版本Nginx

  • wget http://nginx.org/download/nginx-1.12.2.tar.gz

3)备份之前的Nginx相关的内容,以防操作过程有误而引起异常

4)下载rtmp模块

  • git clone https://github.com/arut/nginx-rtmp-module.git

5)到Nginx所在路径下cd ../nginx-1.12.2

6)确认root目录下存在 /root/lnmp1.4/src/openssl-1.0.2l 。 如果不存在,则下载openssl-1..0.2l版本,并解压到/root/lnmp1.4目录下。

7)执行,注意路径需要根据具体的情况做调整,比如module等路径

  • ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --add-module=/nginx-rtmp-module

  • make && make install

  • cp objs/nginx /usr/local/nginx/sbin/nginx

8)测试是否正常

  • /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

9)检查是否有rtmp模块了

  • /usr/local/nginx/sbin/nginx -V

10)reload 或者restart

安装成功后就可以进行ffmpeg的模拟推流了

5. 模拟直播推流

1)ffmepg

  • udp输出

后台执行方式:setsid  ./ffmpeg -re -fflags +genpts -stream_loop -1 -i input.ts -vcodec copy -acodec copy -f mpegts udp://238.112.112.112:3300

  •  

    • 这里需要说明的是setsid是后台执行

    • 这里的输出为udp输出。注意输出的udp地址可能是广播,组播,或者单播方式。需要根据具体的组网情况做处理。如果是整组服务器内都能接收到,可能各组服务器的网口流入流量会受一些影响。

    • 组播的地址说明如下:(下图采至网络)

image.png

  • rtmp输出

    • ffmpeg -re -i input.mp4 -f flv rtmp://192.168.0.11/live

    • 需要注意输入视频的音视频编码格式是否符合flv的格式输出

    • rtmp中的ip可以根据实际情况做调整,也可以加上端口号

  • hls输出

    • ffmpeg -re -i input.mp4 -vcodec copy -f flv rtmp://192.168.0.11/hls/live

  • dash输出

    • ffmpeg -re -i input.mp4 -vcodec copy -f flv rtmp://192.168.0.11/dash/live

  • 其他说明

    • 对于hls或dash,也可以将rtmp作为输入源,进行切片输出,比如

    • ffmpeg -i rtmp://localhost/rtmplive/ -vcodec copy -hls_time 5 live.m3u8

2)vlc

这里主要指udp输出

  • 先安装vlc

  • vlc input.mp4 -I "dummy" -L --no-inhibit --sout '#std{access=udp{ttl=1}, mux=ts, dst=238.123.45.1:3001}'

  • 需要注意的是,udp支持的音视频编码格式,如果输入源的格式不支持,需要进行相应的转码处理。

6.对外可访问url格式

1)udp

    • udp://238.123.45.1:3001

2)rtmp

    • rtmp://192.168.0.11/live

3)hls

    • http://192.168.0.11/hls/live.m3u8

相关的端口都是在Nginx的配网文件中配置好的。rtmp默认端口1935

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200