iOS 中的 FFmpeg、videotoolbox 和 avplayer

FFmpeg, videotoolbox and avplayer in iOS

我有一个问题,这些东西是如何连接的,以及它们究竟做了什么。

仅供参考,我对视频播放器和编码解码有一些经验。

在我的工作中,我处理来自服务器的 udp 流,并使用 ffmpeg 对其进行解码并使用 openGL 进行绘制。并且还使用 ffmpeg 作为视频播放器。

这些是问题...

1.只有ffmpeg可以解码UDP流(从服务器用ffmpeg编码)或不?

我找到了一些关于 videotoolbox 的有用信息,它可以在 iOS 中使用硬件加速解码流式传输。那么我也可以使用 videotoolbox 解码来自服务器的流媒体吗?

2。如果可以使用 videotoolbox 解码(我的意思是如果 videotoolbox 可以替代 ffmpeg),那么 ffmpeg 中的 videotoolbox 源代码是什么?为什么它在那里?

在我的解码器中,我从流媒体中创建了 AVCodecContext,它有 hwaccel 和 hwaccel_context 字段,它们都设置为 null。我认为这个 videotoolbox 是一种 API 可以帮助 ffmpeg 使用 iOS 的 hwaccel。但目前看来并非如此...

3。如果 videotoolbox 可以解码流媒体,这是否也可以在本地解码 H264?还是只能流式传输?

AVPlayer 是播放视频的好工具,但是如果videotoolbox 可以代替这个AVPlayer 那么有什么好处呢?还是不可能?

4. FFmpeg 仅使用 CPU 进行解码(软件解码器)或 hwaccel 也?

当我使用 ffmpeg 播放器播放视频时,CPU 使用率超过 100%,这是否意味着此 ffmpeg 仅使用软件解码器?或者有什么方法可以使用 hwaccel?

请理解我糟糕的英语,如有任何答复,我们将不胜感激。

谢谢。

1。是否只有ffmpeg可以解码UDP流(使用ffmpeg从服务器编码)?

我不这么认为,因为 videotoolbox 也可以做到。

2。如果可以使用 videotoolbox 解码(我的意思是如果 videotoolbox 可以替代 ffmpeg),那么 ffmpeg 中的 videotoolbox 源代码是什么?为什么它在那里?

有一个解决方案可以使用 ffmpegtcp socket 读取数据并将其传输到 videotoolbox

该解决方案避免了仅使用 ffmpeg 时的高 CPU 使用率,也避免了仅使用 vdeotoolbox 的一些故障,例如从套接字读取数据的延迟。

3。如果 videotoolbox 可以解码流媒体,这是否也可以在本地解码 H264?还是只能流式传输?

videotoolbox 可以播放本地和流媒体。 (如果我错了请纠正我)

4. FFmpeg 仅使用 CPU 进行解码(软件解码器)或 hwaccel 也?

是的,ffmpeg 仅使用 CPU,即 software codec,而 videotoolboxhardware codec