我在RMTP流上将JPEG图像形式的视频帧发送到我的服务器。在服务器端,我想将流(ip +端口)连接到ffmpeg,以便它可以从流中获取图像并从中创建视频流。
实际上我的服务器正在侦听传入帧的IP和端口。这部分完成了。我遇到的问题是如何使用ffmpeg将这些帧转换为视频流。任何人都可以告诉我如何实现这一目标?我知道image2pipe
是我应该使用的,但我还没有在Google上找到它的语法和文档。
答案 0 :(得分:2)
在服务器端,您可以调用cmd-line行应用程序ffmpeg
为您和stream the data执行繁重的工作。
在客户端,我想讨论两种方法:
ffplay
连接到服务器并显示视频流。优点:这是最简单,最快速的解决方案!
很久以前有些人 FFmpeg was ported to the iPhone,所以你可以从iPhone调用ffplay
,告诉它连接到服务器并完成工作!查看Streaming a simple RTP audio stream from FFmpeg以获取快速示例。
缺点:似乎是there are legal issues involved on this matter,因此有些人不建议您使用FFmpeg分发您的应用。
ffplay
的应用程序。专业人士:您可以使用自定义编码/解码程序来保护正在广播的数据,并让世界上其他所有人都使用您的播放器来观看该流。
如果您要传输真正的JPEG(带有标题和所有内容,就像普通的JPEG文件一样),首先需要使用networking library来允许应用程序连接到服务器并检索数据。
我建议,对于服务器接收的每个新连接,它会发送一个自定义标头(几个字节),通知客户端正在发送的每个帧的大小(因此客户端知道每个帧的大小)。 / p>
之后,应用程序将需要使用另一个库将传入数据解释为JPEG帧/文件。我现在可以想到OpenCV,但我相信你可以找到更小的库。也许iOS为此提供了一个框架,但我真的不知道。
一旦您的应用程序访问了每个框架所包含的所有有用信息(即图像尺寸和像素),您的应用程序就会为从网络到达的每一帧创建UIImage
with this information,能够display them on the screen。
缺点:您必须从头开始创建应用程序,并且可能会在途中学习一些新的API。
答案 1 :(得分:1)
实际上有两种方法:
ffmpeg -i "rtmp://localhost/etc" out.flv
或
rtmpdump -v -r rtmp://localhost/etc | ffmpeg -i - out.flv