FFMpeg - 好用吗
FFMpeg - Is it difficultt to use
我正在尝试使用 ffmpeg,并且在过去 1 个月里做了很多实验。
我一直无法通过。 FFmpeg真的很难用吗?
我的要求很简单,如下。
如果 ffmpeg 是合适的或者我自己实现了(使用可用的编解码器库),你能指导我吗?
- 我有一个 webm 文件(有 VP8 和 OPUS 框架)
- 我会读取编码后的数据发送给远程的家伙
- 远程人员将从套接字读取编码数据
- 远程的人会把它写到一个文件中(我们可以避免解码吗)。
- 那么远程的人应该可以使用ffplay或任何播放器来支付文件。
下面我举个具体的例子
假设我有一个文件 small.webm,其中包含 VP8 和 OPUS 帧。
我正在使用 av_read_frame api 只读取音频帧 (OPUS)(然后检查流索引并仅过滤音频帧)
所以现在我的数据缓冲区(编码)为packet.data,编码数据缓冲区大小为packet.size(如有错误请纠正)
这是我的第一个疑惑,每次的音频包大小都不一样,为什么不一样。有时数据包大小低至 54 字节,有时为 420 字节。对于 OPUS,帧大小会不时变化吗?
接下来说用什么方法从数据包中提取单帧(真的不知道怎么提取单帧)发给远程的家伙。
现在远程人员需要将缓冲区写入文件。要写入文件,我们可以使用 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.
是的,你知道。它们位于您从发件人中的多路分解器收到的原始数据包中。您需要序列化此数据包中的所有信息,并在接收器中相应地设置每个值。
我正在尝试使用 ffmpeg,并且在过去 1 个月里做了很多实验。 我一直无法通过。 FFmpeg真的很难用吗?
我的要求很简单,如下。 如果 ffmpeg 是合适的或者我自己实现了(使用可用的编解码器库),你能指导我吗?
- 我有一个 webm 文件(有 VP8 和 OPUS 框架)
- 我会读取编码后的数据发送给远程的家伙
- 远程人员将从套接字读取编码数据
- 远程的人会把它写到一个文件中(我们可以避免解码吗)。
- 那么远程的人应该可以使用ffplay或任何播放器来支付文件。
下面我举个具体的例子
假设我有一个文件 small.webm,其中包含 VP8 和 OPUS 帧。
我正在使用 av_read_frame api 只读取音频帧 (OPUS)(然后检查流索引并仅过滤音频帧)
所以现在我的数据缓冲区(编码)为packet.data,编码数据缓冲区大小为packet.size(如有错误请纠正)
这是我的第一个疑惑,每次的音频包大小都不一样,为什么不一样。有时数据包大小低至 54 字节,有时为 420 字节。对于 OPUS,帧大小会不时变化吗?
接下来说用什么方法从数据包中提取单帧(真的不知道怎么提取单帧)发给远程的家伙。
现在远程人员需要将缓冲区写入文件。要写入文件,我们可以使用 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.
是的,你知道。它们位于您从发件人中的多路分解器收到的原始数据包中。您需要序列化此数据包中的所有信息,并在接收器中相应地设置每个值。