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

7
我正在以JPEG图像的形式通过RMTP流向服务器发送视频帧。在服务器端,我想要连接流(IP +端口)到ffmpeg,以便它可以从流中捕获图像并从中创建视频流。
实际上,我的服务器正在侦听传入帧的IP和端口。这部分已经完成。 我卡住的地方是如何使用ffmpeg将这些帧转换为视频流。请问有人能告诉我如何实现吗?我知道image2pipe是我应该使用的,但我在Google上没有找到它的语法和文档。

你想要什么输出格式?ffmpeg的输入是RTMP还是管道?ffmpeg都可以处理。 - llogan
在客户端即iPhone应用程序中,我将以图像jpeg格式发送图像。我不确定是否使用管道或RTMP。这是我想与你们讨论的问题。此外,我希望以RTMP流的形式直接向观众流式传输视频。 - Aqueel
2个回答

2
在服务器端,你可以调用命令行应用程序ffmpeg来为你完成繁重的工作并流式传输数据
在客户端,有两种方法要讨论: 方法1:使用iPhone上的ffplay连接到服务器并显示视频流。 优点:这是最简单和最快速的解决方案! 一些人很久以前将FFmpeg移植到了iPhone,所以你可以从iPhone上调用ffplay,告诉它连接到服务器,工作就完成了!查看从FFmpeg流式传输简单的RTP音频流以获得一个快速的示例。
缺点:似乎这个问题涉及到法律问题,因此有些人不建议使用FFmpeg分发您的应用程序。
方法2:为iPhone编写类似于ffplay的应用程序。
优点:您可以具有自定义的编码/解码过程来保护正在广播的数据,并使全世界的其他人都使用您的播放器观看流。
如果您正在流式传输真实的JPEG(带有标题和所有内容,就像常规JPEG文件一样),那么您需要做的第一件事是使用网络库允许您的应用程序连接到服务器并检索数据。
我建议对于每个新连接,您的服务器都会发送一个自定义标头(几个字节),通知客户端正在发送的每个帧的大小(以便客户端知道每个帧的大小)。

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

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

缺点: 您将不得不从头开始创建一个应用程序,并可能在此过程中学习一些新的API。


嗨karlphilllip,我不想在iPhone上使用ffmpeg。我的想法是,iPhone只需将视频帧以jpeg图像的形式发送到服务器,服务器将负责将其编码成视频并进行流式传输。 - Aqueel
那么您要寻找的是 方法2 - karlphillip

1
事实上有两种方法:

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

或者

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

嗨,Alex,我不想要FLV文件,我想直接将数据流式传输到输出流以供观看者观看。 - Aqueel
1
那么为什么不用ffplay替换ffmpeg呢? - alexbuisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接