实验项目三 推流

  项目比较核心的一块,但主要内容在与软件的使用。直播项目分为采集、编码、推流、拉流、解码以及过程间的处理。这个项目的采集、编码、推流用ffmpeg实现,拉流、解码用B站开源的flv.js实现。

  比较系统的ffmpeg的介绍见CSDN,下面还会提到。flv.js项目见GitHub

 

  Part1 Nginx

  Nginx用来作流媒体服务器。流媒体再传播过程中的协议有许多种类,这个项目采用的是HTTP-FLV,理由很简单,RTMP用不了了,HLS受众小。

  Nginx官网下载的包并不支持采用的HTTP-FLV,需要将第三方模块nginx-http-flv-module编译进去。该模块介绍见CSDN,项目见GitHub

 

  Part1.1 编译支持nginx-http-flv-module的Nginx

  步骤参考CSDN

  遇到的问题:

  ▶auto/configure失败

    ▷版本号未对应,修改指令即可

  ▶warning C4047: “return”:“const char *”与“int”的间接级别不同

    ▷参考CSDN,将return(cflags); 改成  return(CFLAGS);即可

  ▶error LNK2019: 无法解析的外部符号 ___iob_func,该符号在函数 _main 中被引用

    ▷原因经搜索应该是VS版本更新带来的包引用出问题,碍于软件水平不到位,暂用现成项目。

 

  编译完成后,使用前需要对Nginx配置文件:Nginx.conf进行配置,详解见CSDN

event{}
http{}
rtmp{  #即rtmp服务器   paramerter   server{     listing     application{}   } }

 

  服务器配置好并应用后,开启服务器即可进行推拉流的尝试了:

// push
ffmpeg -re -i test1.mp4 -vcodec h264 -f flv rtmp://localhost:1935/http_flv/vedio
// -i 后面跟输入 最后是输出,其余都是参数。ffmpeg的退出指令是q,不过ctrl+c显示的也是正常退出。
// pull http://localhost:8080/live?port=1935&app=http_flv&stream=vedio
// 8080是Nginx的http服务监听的端口,live是http服务中location,port后面跟rtmp监听的端口,app对应rtmp服务中的应用,流名称自定义。
// or
rtmp://localhost:1935/http_flv/vedio
// 需要支持rtmp域

 

  Part2 构建flv.js和flv.min.js

  详见Github中Install和Build部分

  遇到的问题

  ▶Assertion `args[1]->IsString()' failed.

    ▷参考CSDN

    ▷gulp版本太低,故更新gulp版本npm install --save-dev gulp@4

  ▶AssertionError [ERR_ASSERTION]: Task function must be specified

    ▷参考简书 和 这个网站

    ▷gulp版本4.0更换源码,部分代码不符合规范,可修改代码块或者改用gulp3。大无语事件发生了!!!

  ▶ReferenceError:primordials is not defined

  -node版本高,用nvm工具更换到11.15.0

  ▶Empty block statement  no-empty

    OR Missing whitespace after semicolon  semi-spacing

    OR Unnecessary semicolon  no-extra-semi

    ▷打开对应js文件,修改错误问题即可

 

  构造完毕后,在项目中导入flv.js即可使用了,可以通过魔改官方提供的Demo偷懒

 

  Part3 推流到flv.js

  可以直接再官方demo中适用。解析器不支持rtmp域所以需要用http开头的地址拉流。

  推流若无audio不能开hasAudio按钮,否则无限加载

  延迟3-10s都遇到过

 


2021年6月23日

14点06分

H40Y

 

posted @ 2021-06-23 13:46  H40Y  阅读(3)  评论(0)    收藏  举报