FFMpeg - 难以使用

时间:2015-07-13 04:29:06

标签: ffmpeg

我正在尝试使用ffmpeg,并且在过去的一个月里做了很多实验。 我无法通过。使用FFmpeg真的很难吗?

我的要求很简单,如下所示。 如果ffmpeg是合适的,或者我自己实现(使用可用的编解码器库),请指导我。

  1. 我有一个webm文件(有VP8和OPUS帧)
  2. 我将读取编码数据并将其发送给远程人员
  3. 远程人员将从套接字
  4. 中读取编码数据
  5. 远程人员会将其写入文件(我们可以避免解码)。
  6. 然后,远程家伙应该能够使用ffplay或任何播放器支付文件。

  7. 现在我将举一个具体的例子。

    1. 假设我有一个文件small.webm,包含VP8和OPUS帧。

    2. 我只使用av_read_frame api读取音频帧(OPUS)(然后检查流索引并仅过滤音频帧)

    3. 所以现在我有数据缓冲区(编码)作为packet.data,编码数据缓冲区大小为packet.size(如果错误,请纠正我)

    4. 这是我的第一个疑问,每次音频包的大小都不一样,为什么不同。有时数据包大小低至54字节,有时为420字节。对于OPUS,框架尺寸会不时变化吗?

    5. 接下来说以某种方式从数据包中提取单个帧(实际上不知道如何提取单个帧)并将其发送给远程人员。

    6. 现在,远程人员需要将缓冲区写入文件。要编写文件,我们可以使用av_interleaved_write_frame或av_write_frame api。他们都把AVPacket作为参数。现在我可以拥有一个AVPacket,设置其数据和大小成员。然后我可以调用av_write_frame api。但这不起作用。原因可能是应该在数据包中设置其他成员,如ts,dts,pts等。但我没有这样的信息来设置。

    7. 有人可以帮助我了解FFmpeg是否是正确的选择,还是应该编写自定义逻辑,例如解析opus文件并逐帧获取。

1 个答案:

答案 0 :(得分:2)

  

现在,远程人员需要将缓冲区写入文件。写文件   我们可以使用av_interleaved_write_frame或av_write_frame api。两者的   他们把AVPacket作为参数。现在我可以拥有一个AVPacket,设置它   数据和大小成员。然后我可以调用av_write_frame api。但那   不起作用。原因可能是应该在数据包中设置其他成员   像ts,dts,pts等。但是我没有这样的信息来设置。

是的,你这样做。它们位于您从发送方的解复用程序中收到的原始数据包中。您需要序列化此数据包中的所有信息,并在接收器中相应地设置每个值。