以ffmpeg为核心,包装一款局域网内接收转码并推送互联网的客户端软件。本文仅使用ffmpeg基础功能,拉流、转码、推流及简单播放设置。

工作流程

拉取远端视频流,视频流格式为 rtsp

转换为常用播放格式 rtmp

推送至播放端口 rtmp://您的推送端地址,用户使用播放软件连接该地址后可以直接进行内容播放

所需工具及软件

1、ffmpeg 命令行工具官网链接,选择它的优势在于:

免费

无需安装,很大的减少用户操作复杂度

命令行启动调用

2、nodejs 版本号为 v6.11.3。(实际项目中使用electron,但若没有打包成客户端的需求,nodejs即可正常运行)

3、tsc 版本号为 v2.6.1。项目使用TypeScript为主要编写语言,您使用JavaScript也没有问题。

若使用tsc,请使用2.0以上版本,自带的@type工具会极大提升编码效率

4、fluent-ffmpeg 版本号为 v2.1.2。该nodejs包封装了ffmpeg的命令行调用部分,加强了代码的可读性,若熟悉ffmpeg 命令行使用手册,亦可不使用该包。

npm install --save fluent-ffmpeg

//使用js编码的用户,可以忽略下条命令

npm install --save @types/fluent-ffmpeg

VLC播放软件。用于监测推流、转码、播放是否正常。官网链接

实现代码

const ffmpegPath = "./dist/ffmpegProgram/bin/ffmpeg.exe";

const ffprobePath = "./dist/ffmpegProgram/bin/ffprobe.exe";

const flvtoolPath = "./dist/ffmpegProgram/bin/ffplay.exe";

export function startPushVideo():void{

getCommands().then((commands:ffmpegPaths[])=>{

for(let key in commands){

let command = commands[key];

//设置输入流地址

let ffCommand = ffmpeg(command.inputPath)

//设置输出流地址

.output(command.outputPath)

//因需要打包客户端软件,故而将ffmpeg打包进软件中

//需设置各应用程序的对应路径

//若仅在本机使用,可以跳过该步骤

//设置环境变量,添加 PATH 即可

.setFfmpegPath(ffmpegPath)

.setFfprobePath(ffprobePath)

.setFlvtoolPath(flvtoolPath)

//为保证灵活性,非必须参数采用配置文件读取模式

.size(command.size);

for(let key in command.args){

ffCommand.outputOption(command.args[key]);

}

ffCommand.on("start",(commandLine)=>{

//commandLine 为实际上调用的命令行命令,拼接逻辑为

//您的ffmpeg所在路径 -i inputOptions 您的拉流协议和路径 outputOptions 推送流协议和地址

//ffmpeg -i "rtsp://yourPullUrl" -f flv -r 25 -s 640x480 -an "rtmp://yourPushUrl"

console.log('[' + showTime() + '] Vedio is Pushing !');

console.log('[' + showTime() + '] Spawned Ffmpeg with command !');

console.log('[' + showTime() + '] Command: ' + commandLine);

})

.on('error', function(err, stdout, stderr) {

console.log('error: ' + err.message);

console.log('stdout: ' + stdout);

console.log('stderr: ' + stderr);

})

.on('end', function() {

console.log('[' + showTime() + '] Vedio Pushing is Finished !');

})

.run();

}

},(error)=>{

console.log('error: ' + error);

})

}

小结

通过监听"start"获取的命令,亦可以通过 exec(yourCommandLine) 进行调用操作,但此时无法控制 ffmpeg 的运行结果。该程序结束运行之后,ffmpeg进程依然在运行,直至流报错或手动停止进程。暂时不清楚为何 fluent-ffmpeg 可以做到在本体进程结束后,通知关闭第三方进程。猜测是通过命令行输入切断进程,若仅通过 ChildProcess.kill() 是无法关闭第三方进程。

在I5 8G 机器上运行,单流推送已占用35%左右cpu,多流推送需使用其他方案解决。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

ffmpeg教程 php推流,详解NODEJS基于FFMPEG视频推流测试相关推荐

  1. ffmpeg播放器实现详解 - 音频同步控制

    ffplay是ffmpeg源码中一个自带的开源播放器实例,同时支持本地视频文件的播放以及在线流媒体播放,功能非常强大. FFplay: FFplay is a very simple and port ...

  2. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  3. mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例

    <MysqL教程MysqL 复制详解及简单实例>要点: 本文介绍了MysqL教程MysqL 复制详解及简单实例,希望对您有用.如果有疑问,可以联系我们. MysqL 复制详解及简单实例 主 ...

  4. cs6导航栏代码html,总算认识网页设计教程|Dreamweaver-CS6工具栏详解

    总算认识网页设计教程|Dreamweaver-CS6工具栏详解 日期:2019-08-31 16:18:59 浏览:194 核心提示:网页设计教程|DreamweaverCS6工具栏详解.为了更好地使 ...

  5. DVWA的安装教程和通关详解

    DVWA的安装教程和通关详解 目录 一.环境搭建 1.下载和安装phpstudy 2.DVWA下载 3.DVWA安装 更改配置信息 解决爆红错误 二.Brute Force 1.LOW级别 2.Med ...

  6. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

    FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...

  7. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  8. CentOS 7安装教程(图文详解)如下

    虚拟机安装 CentOS 7安装教程(图文详解)如下:

  9. 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...

    原标题:博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型 国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共 ...

  10. 技术详解:基于人脸识别的 AI 弹幕

    --------点击屏幕右侧或者屏幕底部"+订阅",关注我,随时分享机器智能最新行业动态及技术干货---------- 有时候,弹幕比剧情还精彩,那些脑洞大开.观点鲜明的弹幕,可以 ...

最新文章

  1. 将代码生成器带入TVM
  2. 分析B站10万条弹幕后,发现了歪嘴战神的终极奥义!
  3. 《LeetCode力扣练习》第617题 合并二叉树 Java
  4. 存储过程学习三(创建存储过程实例)
  5. C#中使用jieba.NET、WordCloudSharp制作词云图
  6. uva 10570—— Meeting with Aliens
  7. 详解6G系统数据治理方案的设计要点和原则
  8. 动态照片制作html模板
  9. java sha1withrsa公钥加密_数字签名----sha1withrsa
  10. 疑似iPhone 13 mini原型机曝光:后置相机模组排布方式变化
  11. Vysor_2.1.2破解,及安装包
  12. javascript函数的声明,及返回值
  13. MySQL下xtrabackup与MTS造成的死锁
  14. 微服务学习之消费模块【Hoxton.SR1版】
  15. 【web前端开发】vs code插件推荐
  16. 隐藏水滴屏的软件_隐藏水滴屏的软件
  17. 尽在双11:阿里巴巴技术演进与超越
  18. 8.15游戏背包设计
  19. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)
  20. 世界上最经典的二十四句草根哲理

热门文章

  1. jquery获取style
  2. Dreamweaver CS6 行为概述
  3. 电脑连接HDMI显示器后没声音
  4. [NIPS 2018] Stacked Semantics-Guided Attention Model for Fine-Grained Zero-Shot Learning
  5. Axure 8 - 中继器实战篇
  6. 【新星计划】Matlab pid参数调节工具箱
  7. 单链表的逆置(递归和非递归)
  8. 区块链分叉带来的安全挑战
  9. html页面设计扁平化,50个漂亮的扁平化网页设计欣赏
  10. PostgreSQL外键为空(null)