模拟直播推流(ffmpeg、vlc)【转】

概述

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

  • 1)什么是ffmpeg
    ffmpeg是一套视频处理和存储等的技术方案,重点“开源”、“免费”,“最主流的视频处理技术方案”,“各大厂商基本上都用”。其他的内容可以通过本链接或者各大搜索引擎去了解。
  • 2)什么是直播
    估计你第一反应就是斗鱼等里面的直播。那就太狭义了。我对此的定义是(纯IT属性的简单粗暴)——始终播放最新的视频数据,不能拖动到指定位置进行播放;如果源不断,则不会停止。直播的范围就很广了,有常见的斗鱼里面的那种直播,还有广电里的电视直播,当然视频安防监控,那种实时的画面也是直播。关于直播的相关内容,比如有哪些直播的传输技术方案,还是右转看链接或自己去搜索吧。
  • 3)模拟推流
    这里肯定有人会问,为啥要用模拟的。
    第一,总不能去各大网站去截取直播视频源吧,这种既不太合法,也不一定能拿到啊,想想防盗链。
    第二,如果视频源断了呢。so,求人不如求己,那就撸袖子开始搞吧,要啥视频源就自己找。
    当然模拟的就有个弊端,一般是通过点播,通过相应的技术进行模拟输出为直播,那就不可避免的点播的视频是有开始和结束的,换到直播上就是循环播放。

好奇的小伙伴肯定会问,那某些视频大厂他们有些视频轮播(比如某部电视剧从第一集开始,一集集播,然后也不能拖动)他们不会用的是这种技术吧?
呵呵,答案是我也不知道的,因为我也没有研究过。勤奋的小伙伴可以自己去挖掘下。当然,有些人想了解有什么模拟推流的方式,还是右转看链接或者自己去了解(知识总是留给勤奋的人)。基础情况已经了解了,那接下去就是执行层面的事情。
在这里插入图片描述

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 当出现类似如下时,则说明成功了。
    在这里插入图片描述

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输出,报了如下错误。如果没有如下错误则忽略。
    在这里插入图片描述

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地址可能是广播,组播,或者单播方式。需要根据具体的组网情况做处理。如果是整组服务器内都能接收到,可能各组服务器的网口流入流量会受一些影响。

      组播的地址说明如下:(下图采至网络)
      在这里插入图片描述

    • 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

【说明】
文章转自,华为云社区,作者Higeeon,相关版权解释权归原作者所有。https://bbs.huaweicloud.com/blogs/23ff8908b1e011e9b759fa163e330718

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从引用内容中可以得知,使用ffmpeg可以实现直播推流。首先需要下载ffmpeg和ffplay,并将其与成品软件放置在同一个目录下。ffmpeg是一个跨平台的工具,支持多平台多账号同时推流本地视频,实现无人直播推流的地址统一为rtmp://127.0.0.1:1935/live/123。使用ffmpeg推流的方法与本地视频推流类似,只需将摄像头拍到的画面实时推流出去即可。注意,推流的过程可能会有一定的延迟,并且默认情况下没有声音。如果需要推流麦克风的声音,也可以进行相应的设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [利用ffmpeg实现rtmp推流直播](https://blog.csdn.net/gqg_guan/article/details/129144426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [易语言-ffmpeg直播推流,可实现抖音等全平台无人直播](https://download.csdn.net/download/weixin_38686231/19833828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值