繁体   English   中英

使用ffmpeg从服务器流式传输视频帧

[英]Streaming video frames from server with ffmpeg

我在RMTP流上将JPEG图像形式的视频帧发送到我的服务器。 在服务器端,我想将流(ip +端口)连接到ffmpeg,以便它可以从流中获取图像并从中创建视频流。

实际上我的服务器正在侦听传入帧的IP和端口。 这部分完成了。 我遇到的问题是如何使用ffmpeg将这些帧转换为视频流。 任何人都可以告诉我如何实现这一目标? 我知道image2pipe是我应该使用的,但我还没有在Google上找到它的语法和文档。

在服务器端 ,您可以调用cmd-line行应用程序ffmpeg为您执行繁重的工作并流式传输数据

在客户端 ,我想讨论两种方法:

方法1 :使用iPhone上的ffplay连接服务器并显示视频流。

优点 :这是最简单,最快速的解决方案!

有些人很久以前就把FFmpeg移植到了iPhone上 ,所以你可以从iPhone调用ffplay ,告诉它连接到服务器并完成工作! 检查流式传输来自FFmpeg的简单RTP音频流,以获得快速示例。

缺点 :似乎在这个 问题上 涉及 法律问题 ,因此有些人不建议使用FFmpeg分发您的应用程序。

方法2 :为iPhone编写类似于ffplay的应用程序。

优点 :您可以使用自定义编码/解码程序来保护正在广播的数据,并让世界上的其他人使用您的播放器来观看流。

如果您要传输真正的JPEG(带有标题和所有标题,就像普通的JPEG文件一样),您首先需要使用网络库来允许您的应用程序连接到服务器并检索数据。

我建议,对于服务器接收的每个新连接,它会发送一个自定义标头(几个字节),通知客户端正在发送的每个帧的大小(因此客户端知道每个帧的大小)。

之后,应用程序将需要使用另一个库将传入的数据解释为JPEG帧/文件。 我现在可以想到OpenCV,但我相信你可以找到更小的库。 也许iOS为此提供了一个框架,但我真的不知道。

一旦您的应用程序访问了每个框架携带的所有有用信息(即图像尺寸和像素),您的应用程序将为从网络到达的每个帧创建一个包含此信息UIImage ,以便能够在屏幕上显示它们

缺点 :您必须从头开始创建应用程序,并且可能会在途中学习一些新的API。

实际上有两种方法:

ffmpeg -i "rtmp://localhost/etc" out.flv

要么

rtmpdump -v -r rtmp://localhost/etc | ffmpeg -i - out.flv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM