Discuz! Board

 找回密码
 
搜索
查看: 1879|回复: 2

ffmpg\rtmp\flv 胡侃乱扯随便说说

[复制链接]

20

主题

84

帖子

457

积分

Rank: 7Rank: 7Rank: 7

积分
457
发表于 2014-10-20 12:40:22 | 显示全部楼层 |阅读模式
本帖最后由 mingyuejingque 于 2014-10-20 12:46 编辑

  很久很久以前,第一次听说有个技术可以实现在浏览器里观看直播,迫不及待的了解一下,安装了fms,接上摄像头,哇啊啊~~居然真的可以在web里看到直播了耶~ 真爽!
  过了几天,发现fms的授权好贵啊,开机启动的服务、安装的程序一大堆。并且想控制rtmp的app,要写个as脚本, 抄袭了一下感觉还一般般,有一天发现居然免费的有限制。 后来又听说有个叫red5的小娘们是开源的,也比较出名,既然如此就看看呗, 卧槽,居然是java的,先装环境吧老衲就比较嫌这些麻烦事,磨磨蹭蹭搭建起来之后居然也可以发布直播,嗬嗬嗬~~既然是开源的,就给它写个插件吧,插进去也感觉不咋的~总感觉性能存在压力。
  老衲希望能有一款c/c++写的开源,不需要依赖什么环境的,在crtmpd的官网上看到它号称百万量, O(∩_∩)O哈哈~试了一下还行了。可是还得有个web服务器来放网页配合啊,觉得ningix看起来比较厉害的样子,居然github上有个俄罗斯的猛牛放出了rtmp的插件,那就赶紧编译一个来玩呗,结果感觉非常良好,O(∩_∩)O哈哈~ (这个nginx程序也早就传到论坛里了。)
  那么,还得搞一个发布程序呗, 用ffmpeg吧,采集、编码、发布、直播、rtmp/hls都挺舒服的~~嗬嗬嗬。
  就这样过了很久,小乙哥说他也写了一个叫SRS的rtmp服务器,BLS的rtmp服务器, BLE的发布器,  大家测试的效果厉害~!赞N个:victory:
  他把代码放到了github,大家懂的:https://github.com/wenjiegit
  有一天,小乙哥说他发布的码流比较小,老衲请教他怎么玩的,他说把B帧设置为3, 老衲一听,这是很好的现象啊赶紧试试, 大概可以优化1/5.能优化。flv/rtmp里普通视音频包的时间戳要保持平滑或向上趋势, 要是中途出现下跌的抖动就会出问题。在rtmp的文档里提到composition time 正好可以用来解决B帧dts和pts不一样的问题。
  先来引用stackoverflow的一篇文章:
CompositionTime Composition time offset
See ISO 14496-12, 8.15.3 for an explanation of composition times. The offset in an FLV file is always in milliseconds
provides the offset between decoding time and composition time. Since decoding time must be less than the composition time, the offsets are expressed as unsigned numbers such that CT(n) = DT(n) + CTTS(n) where CTTS(n) is the (uncompressed) table entry for sample n.

For MPEG-4 H.246 transcoders that deliver I-frame, P-frame, and B-frame NALUs inside an MPEG-2 transport, the resulting packetized elementary streams (PES) are timestamped with presentation time stamps (PTS) and decoder timestamps (DTS) in time units of 1/90000 of a second.
The NALUs come in DTS timestamp order in a repeating pattern like
I P B B B P B B B ...  
where the intended playback rendering is
I B B B P B B B P ...
(This transport strategy ensures that both frames that the B-frame bridges are in the decoder before the B-frame is processed.)
For FLV, the Timestamp (FLV spec p.69) tells when the frame should be fed to the decoder in milliseconds, which is
timestamp = DTS / 90.0
The CompositionTime (FLV spec p.72) tells the renderer when to perform ("compose") the video frame on the display device in milliseconds after it enters the decoder; thus it is
compositionTime = (PTS - DTS) / 90.0
(Because the PTS >= DTS, this delta is never negative.)

大概知道什么意思了没?再来帖 一张图,从flv的标准文档里扣的:
171418e41x9e74zux9ccn1.png
就是给它赋值 compostionTime即可。

171658dv4mm0qde2eqq40d.png
代码是老衲写的,说明技术细节所用,不得转载。 也不准跟老衲索要代码,会假装不在线的。

ffmpeg 代码里又是怎么写的呢?抄袭代码贴上来:
QQ截图20141020123525.png
O(∩_∩)O哈哈~, 好直接。

接着说说持续发布时间长了,时间戳要怎么发。 先上rtmp的文档:
QQ截图20141020123705.png
看吧,就是这样发 不管三七二十一抄袭ffmpeg的代码:
QQ截图20141020123907.png

老衲曾经用ffmpeg来持续发布过10多天都正常,不会因为时间戳方面导致问题。倒是拖地的时候搞到采集卡的接口害得蓝屏问题了,日。

回复

使用道具 举报

676

主题

2229

帖子

3万

积分

吼山居士

Rank: 9Rank: 9Rank: 9

积分
34932
QQ
发表于 2014-10-21 10:52:44 | 显示全部楼层
精屁啊,这个真的不顶不行。鹊哥现在是RTMP流媒体专家了。
拒收论坛短消息,有问题请直接在论坛提问。

所有我的答复与微博同步,欢迎收听我的腾讯微博, 新浪微博,第一时间得到问题答复。

Item 1: Don't abuse your power        条款一:不要滥用权利
Item 2: Share expert knowledge        条款二:分享你的知识
Item 3: Respect other people's privacy        条款三:尊重他人的隐私
Item 4: Make yourself look good online        条款四:给自己网上留个好印象
Item 5: Help keep flame wars under control        条款五:平心静气地争论
Item 6: Respect other people's time and bandwidth        条款六:尊重别人的时间和带宽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

13

积分

Rank: 1

积分
13
发表于 2015-11-17 11:46:42 | 显示全部楼层
前段时间一直在研究这块的,最后推出的音视频有问题
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver||С|Comsenz Inc.  

GMT+8, 2017-12-13 19:16 , Processed in 0.036214 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表