FFMpeg - 好用吗

FFMpeg - Is it difficultt to use

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

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

  1. 我有一个 webm 文件(有 VP8 和 OPUS 框架)
  2. 我会读取编码后的数据发送给远程的家伙
  3. 远程人员将从套接字读取编码数据
  4. 远程的人会把它写到一个文件中(我们可以避免解码吗)。
  5. 那么远程的人应该可以使用ffplay或任何播放器来支付文件。


下面我举个具体的例子

  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 等。但我没有要设置的信息。

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

Now remote guy need to write the buffer to a file. To write the file we can use av_interleaved_write_frame or av_write_frame api. Both of them takes AVPacket as argument. Now I can have a AVPacket, set its data and size member. Then I can call av_write_frame api. But that does not work. Reason may be one should set other members in packet like ts, dts, pts etc. But I do not have such informations to set.

是的,你知道。它们位于您从发件人中的多路分解器收到的原始数据包中。您需要序列化此数据包中的所有信息,并在接收器中相应地设置每个值。