少女祈禱中...
Loading...
图片加载过慢?试试 从源站加载资源 X

ccloli

[废稿] FFmpeg 推流指令小记

这是一篇废弃的文章。由于某些原因,本文未能最终成文,并且由于时间久远,已经没有成文的可能性,还请谨慎阅读。

若您需要了解最终解决方法,解决思路为:使用 Node.js 的 child_process 创建三个 FFmpeg 进程,第一个负责从文件列表循环读取文件并指定 -re 参数,然后使用统一的编码参数封装为 mpegts 格式,并输出到 stdout;第二个负责从一个预先录制好的黑屏视频 null.flv 并指定 -re 参数 copy 封装为 nut 格式(我也忘了为什么),并输出到 stdout;第三个负责从 stdin 中读取流,在指定 -err_detect aggressivecopy 封装为 flv 格式,推流到 RTMP 地址。将第一个进程 pipe 到第三个进程,当第一个进程转码完成一个文件后,立即将第二个进程 pipe 到第三个进程,防止推流中断,待第一个进程开始转码文件后再将第一个进程 pipe 到第三个进程。

本文实际发表于 2018 年 10 月 9 日。

最近在研究如何使用 FFmpeg 进行推流,所以在这里记录一下一些基本的命令行参数。

其实在研究 FFmpeg 的推流功能之前,自己也算稍微研究过一些 FFmpeg 的参数,比如下面这个 FFmpeg 录屏的辅助脚本:

总之 FFmpeg 就是一个非常强大的开源编解码解决方案,基于它可以实现绝大多数你所能想到的编解码功能。


下面的参数均是将视频源推到本地的直播源,源地址为 rtmp://localhost/live/ccloli

如果需要自己搭建本地直播平台进行测试,可以试试功能强大的 MistServer 或者短小精悍的 MonaServer

关于 FFmpeg 的具体指令介绍,此处不会完全详细解释,RTFM

如果你需要将一个文件进行推流,可以使用

其中 -re 参数描述如下,简单来说就是让输入的文件流按照指定的时间比率进行输入,从而保证输出流时间的稳定(如果不指定,很有可能会出现跳帧的情况);-i 即输入的文件;-c copy 代表对视频流和音频流都直接进行复制而不进行二次编码;最后是输出参数,-f flv 即 Flv 格式输出,最后输出到 rtmp 地址上。如果指定为一个文件名,那么它就是输出到一个文件。

-re (input)

Read input at native frame rate. Mainly used to simulate a grab device, or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).

如果你需要让这个源循环播放,可以用 -stream_loop 来循环输入流,指定数值为重复次数,-1 为无限循环

READ MORE →

春招前端实习面试小记

于是终于要来给博客除草了——至少在这篇文章开始起笔的时候已经有六个月没有更新了吧,倒是希望能在这篇文章正式发布之前能有些其他的文章吧,当然草稿箱里还留着一篇试用 AWS Education 的文章,不过估计过了这么久也没再发布的欲望了。

这篇文章算是一个真正的日记吧,也不确定能够给其他人带来多大的指导作用。嗯,大概吧。

这篇文章的结构参考了 Legendt 学长对笔试的记录虽然后来发现文风完全不同(

关于面试前的准备的话,其实我是一个比较作的人,投简历只投了鹅厂猪场性浪三家,在面试前基本上没有过多关注面经之类的东西,也没有对数据结构操作系统计算机网络之类的内容进行复习,唯一的复习的话算是在去杭州的路上把那本《你不知道的 JavaScript》往后翻了几十页而已,面试时完全是属于即兴发挥。如果你对面试没有把握的话,千万不要学我,我只是心大而已 = =|||

说明

  • 本人面试的职位为 前端开发工程师,不确定对于其他职位是否有参考意义
  • 本文起笔于网易面试结束与腾讯一面结束后,更新的时候会有相应的时间标记
  • 若未特殊说明,本文中指代的面试均为现场面试,而非电话面试
  • 每个面试官会有不同的风格,所以不能保证本文能与你的情况相同

READ MORE →