FFmpeg流化的问题

battlecity 发布于 2012/04/09 14:23
阅读 3K+
收藏 2
在FFmpeg的介绍里面提到:“  FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 ”请问如何将音视频转化为流?应该用到哪些模块?谢谢!
加载中
0
中山野鬼
中山野鬼

所谓流,特别是音视频里的流,特指bit 流。也就是说,他们的最小有效数据是按照bit为单元的。什么叫流,就是一串串的数据,排排队,有前后相关性。

所以你的问题等于没问。你的问题等价于”如何将音频视频压缩啊,应该用到哪些模块?“,唯一和你整个问题贴近的回答是用FFMPEG整体模块。

0
battlecity
battlecity

引用来自“中山野鬼”的答案

所谓流,特别是音视频里的流,特指bit 流。也就是说,他们的最小有效数据是按照bit为单元的。什么叫流,就是一串串的数据,排排队,有前后相关性。

所以你的问题等于没问。你的问题等价于”如何将音频视频压缩啊,应该用到哪些模块?“,唯一和你整个问题贴近的回答是用FFMPEG整体模块。

多谢。

我是这样理解的,比如有一个视频文件,我想读取它的内容,转化成bit流,发送出去。然后在接收端进行直接播放或者重组成视频文件。这里转化成bit流的操作应如何进行呢?需要自己逐帧提取视频图像,然后手动拆成数据报文发送出去,然后在接收端手动重组么?还是有现成的模块可以用呢?

菜鸟的问题,可能理解存在错误,请指点。

0
中山野鬼
中山野鬼

。。。看来你不是一般的新手。你是蹭亮蹭亮的新手啊。呵呵。

首先,视频是多个图片,连续播放,就和动漫一样,你能理解否?

其次,独立一个图片,内部也存在很多相似的东西,比如一个白墙,左边和右边很像,我们用左边的内容描述右边,则可以少了点信息。

还有,不同图片之间的内容也很像,例如静止的房间里,几乎每个图片都一样。由此图片与图片之间也有相似性。

视频编码目前基本还是传统的客观相似度原理编码。所谓相似度,就是上面的相关性,用一个信息描述很多信息。这中间有设计到不同模式的选择,以及编码算法,比如概率大的数值我们用较少的BIT描述,等等。还有个问题,我们对相似之间的差值,毕竟还是有些不一样的嘛,进行频谱转换,转到另一个空间里,是因为对那个空间的高处内容,也就是高频信息的丢弃,人的主观感受和客观对比差异不明显。由上面几种做法,来压缩视频的信息。

为什么说是客观相似度原理,是因为,编码好坏,目前是用客观方式比较。也即编码后再解码的图像,和原始图像直接一对一的做差值比例分析,并没有采用主观感受的方式实现。

而不同压缩算法,国际标准,基本上逃不离上述远离。而你说怎么处理的,每个模式怎么编写,丢弃哪些,怎么编码,都是各个标准规范的。至于报文什么的,这个是网络的事情,和编解码没有关系。

0
battlecity
battlecity

引用来自“中山野鬼”的答案

。。。看来你不是一般的新手。你是蹭亮蹭亮的新手啊。呵呵。

首先,视频是多个图片,连续播放,就和动漫一样,你能理解否?

其次,独立一个图片,内部也存在很多相似的东西,比如一个白墙,左边和右边很像,我们用左边的内容描述右边,则可以少了点信息。

还有,不同图片之间的内容也很像,例如静止的房间里,几乎每个图片都一样。由此图片与图片之间也有相似性。

视频编码目前基本还是传统的客观相似度原理编码。所谓相似度,就是上面的相关性,用一个信息描述很多信息。这中间有设计到不同模式的选择,以及编码算法,比如概率大的数值我们用较少的BIT描述,等等。还有个问题,我们对相似之间的差值,毕竟还是有些不一样的嘛,进行频谱转换,转到另一个空间里,是因为对那个空间的高处内容,也就是高频信息的丢弃,人的主观感受和客观对比差异不明显。由上面几种做法,来压缩视频的信息。

为什么说是客观相似度原理,是因为,编码好坏,目前是用客观方式比较。也即编码后再解码的图像,和原始图像直接一对一的做差值比例分析,并没有采用主观感受的方式实现。

而不同压缩算法,国际标准,基本上逃不离上述远离。而你说怎么处理的,每个模式怎么编写,丢弃哪些,怎么编码,都是各个标准规范的。至于报文什么的,这个是网络的事情,和编解码没有关系。

您的意思是,FFmpeg只包含如何编解码的问题,不包含如何将视频转换成bit流然后发送的问题喽?
0
中山野鬼
中山野鬼
FFMPEG本身编码完了就是流。再打包发送是属于网络的事情。
0
浪客Dandy
浪客Dandy

流媒体本身对于编码和封装格式还是有一些区分的。

比如是否每一帧都带有时间戳,封装的信息在文件头还是文件尾,等等。

ffmpeg默认可能是支持输出到http的,本质上就相当于内置了一个http服务器来满足你对于流媒体文件的请求。但是这种实现还很简陋,想要达到视频网站那种程度,你还需要更完整的二次开发。

0
battlecity
battlecity

引用来自“浪客Dandy”的答案

流媒体本身对于编码和封装格式还是有一些区分的。

比如是否每一帧都带有时间戳,封装的信息在文件头还是文件尾,等等。

ffmpeg默认可能是支持输出到http的,本质上就相当于内置了一个http服务器来满足你对于流媒体文件的请求。但是这种实现还很简陋,想要达到视频网站那种程度,你还需要更完整的二次开发。

您指的是ffserver吧,我大体看了一下,貌似用的rtp协议。

谢谢,我再研究一下吧。

0
battlecity
battlecity

引用来自“中山野鬼”的答案

FFMPEG本身编码完了就是流。再打包发送是属于网络的事情。
大体明白了,多谢!
0
浪客Dandy
浪客Dandy

这方面vlc做得更好,因为它就是做这个起家的。

你想要更完整的解决方案,可以参考red5, 他就是二次封装ffmpeg和其它的

0
浪子一号
浪子一号
中山野鬼是个高手!
返回顶部
顶部