少女祈禱中...
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 →

又是一年卖萌日(X

噫,结果反应过来已经快要过去了 qaq 那啥……一下子忘记了结果福利也没准备 QAQ……嘤嘤嘤……辣鸡 cc QAQ

在 OpenShift 上安装 Tesseract

最近教务系统的验证码又切换回了旧版的随机位置 + 斜体了,这学期弄的验证码识别也算是废了。这学期采用的新验证码虽然基本每个字符都有粘连,但是由于文本的位置基本是固定的,而且也没有过多的旋转,所以简单地取字模也是可以的(虽然识别率还是非常糟糕啦 _(:3)。现在换回了旧版后反而有些麻烦了,毕竟字符的旋转还是挺难处理的。由于自己用最好的编程语言写了个简单的爬虫,所以顺带试试看做验证码识别吧。

目前网上比较有名的 OCR 应该算是 Tesseract 了吧,Python 端的验证码识别软件 pytesser 就是基于 Tesseract 的。再加上前两年的时候 OpenShift 推出了 Build-It-Yourself 的玩意,就是一个应用 gear 里不仅可以安装 OpenShift 已经提供的 cartridge,用户还可以自己编写一个一键配置脚本,让 OpenShift 导入并安装。于是便考虑在 OpenShift 的一个应用上安装个 Tesseract,至于是不是违反 TOS 什么的再说啦先玩玩再说(x

OpenShift 的添加组件界面

READ MORE →

使用 CSS 跨域获取数据

最近有领导检查,上课不能愉快地玩手机和睡觉了。为了防止不省人事的情况,这家伙把几年前在二手东买的那本《DOM 启蒙》(其实我觉得应该和同系列的另一本书一样,译名为《DOM 启示录》,这样听起来比较厉害)带到了教室。嗯,虽然一直吐槽这本书的排版错误糟蹋了这本书,以至于给我这是盗版书的感觉,不过书的质量还是不错的。

花了一上午看完了整本书,算是把 DOM 整个又复习了一遍。回到寝室的路上突然想起了书中有一章提到可以获取样式表文件的属性,于是机(la)智(ji)的我想出了这么一个奇怪的问题:能不能用 CSS 实现跨域获取数据?

READ MORE →

乱谈 Blob 与 Object URL

* 此文纯粹只是乱谈而已,基本上是只知其一不知其二,还请各位菊苣指正 _(:3

由于某些需要,需要在 JS 里创建一个 Blob(Blob 对象就是包含有只读原始数据的类文件对象)并将数据存入,然后让用户保存它。将其交给用户的方式,对 IE 有一个奇奇怪怪的 navigator.msSaveBlob(),而对大多数现代浏览器来说,可以用 URL.createObjectURL() 来生成一个以 blob: 开头的地址来指向 Blob。目前的主流浏览器都是支持的(不过很可惜,Opera (Presto) 终于在它的最后一个大版本 12 版本实现了 blob,但没有实现 Blob URLs),然而不同浏览器对 Blob 的数据大小是有限制的。这里有份 FileSaver.js 的统计数据。

Browser Constructs as Filenames Max Blob Size
Firefox 20+ Blob Yes 800 MiB
Firefox < 20 data: URI No n/a
Chrome Blob Yes 500 MiB
Chrome for Android Blob Yes 500 MiB
IE 10+ Blob Yes 600 MiB
Opera 15+ Blob Yes 500 MiB
Opera < 15 data: URI No n/a
Safari 6.1+ Blob No ?
Safari < 6 data: URI No n/a
* FileSaver.js 开发者对不支持的浏览器做了一个叫 Blob.js 的兼容脚本,但其本质应该就是将 Blob 转为 data URL

READ MORE →

编程之美 2015 资格赛相关

嗯嗯,参加了之后才知道这种地方不是我等渣渣能去的地方 _(:3」∠)_ 虽然在 hihoCoder 上只要小数据能通过就可以进初赛,但是小数据排名的第一名三项全 AC,罚时只有两个多小时 _(:3」∠)_(虽然由于大数据没过而排名后延了,但现在的第一名还是两个多小时 orz),而且在讨论里他们说到什么“模拟退火”,完全听不懂 _(:3」∠)_ 果然我等只做了两题而且大数据全部 TLE 的渣渣只有当炮灰的命……

咳咳,炮灰归炮灰,还是来看看题目吧,嗯,解题什么的还是挺好玩的……

顺便,没有 JavaScript 差评

READ MORE →

使用 canvas 破解简单验证码

首先,其实这玩意并不算是完全的破解,因为它还需要人工录入的过程,而不是机器自动识别。如果是机器自动识别的话,那该是神经网络了吧——后文会给出一个别人写的例子……话说 CoffeeScript 是什么……

其次,这玩意只能破解非常简单的验证码,也就是那些出现位置固定、没有任何变形和干扰线,甚至颜色差别都不大的验证码,所以像下面这样的验证码还是洗洗睡吧,虽然还是可以识别出验证码的部分,但是识别的话……(canvas 阈值化 by 8q,咳咳,当然 example 也是我们参与的某个玩意的验证码,传说中的自黑

D2YUWF`3L(81`SZ{92TRV4U7O[W~8}V`YA3{]HTN1Z4A_K

再次,每个网站的验证码风格是不一样的,所以基本很难做到一个程序通杀所有验证码。如果真的有这么想过的话,真的可以洗洗睡了……中文验证码祝你好运……

最后,由于源码是手机码的,所以缩进不统一什么的 _(:3」∠)_……

READ MORE →

十月十日

今天又是一年一度的国庆节国际卖萌日……唉,怎么说呢,现在已经卖不起萌了,怎么办…… _(:3」∠)_ 果然已经老了么

(往年黑历史:http://ccloli.com/201310/sell-moe-20131010/ & http://ccloli.com/201210/sell-moe-20121010/

READ MORE →

每天一首小苹果,感觉自己萌!萌!哒!

昨天中午无聊闲逛时,看到了 小苹果 转啊转 这个神奇的东西。觉得无聊于是决定学(shan)习(zhai)一下……

READ MORE →