【问题标题】:Streaming video frames from server with ffmpeg使用 ffmpeg 从服务器流式传输视频帧
【发布时间】:2013-12-26 05:28:03
【问题描述】:

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

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

【问题讨论】:

  • 你想要什么输出格式? ffmpeg 的输入是什么:RTMP 还是管道? ffmpeg 也可以。
  • 在客户端即 iPhone 应用程序中,我将以图像 jpeg 格式的形式发送图像。我不确定我会使用管道还是 RTMP。这就是我想和大家讨论的。我还想以 RTMP 流的形式将视频直接流式传输给观众。

标签: ffmpeg video-streaming


【解决方案1】:

在服务器端,您可以调用命令行应用程序ffmpeg 为您和stream the data 完成繁重的工作。

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

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

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

FFmpeg was ported to the iPhone 是很久以前的事了,所以你可以直接在 iPhone 上调用ffplay,告诉它连接服务器,就大功告成了!查看Streaming a simple RTP audio stream from FFmpeg 以获取快速示例。

缺点:貌似there are legal issuesinvolved on this matter,所以有些人不建议用FFmpeg来发布你的应用。

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

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

如果您正在流式传输真正的 JPEG(包含标题和所有内容,就像常规 JPEG 文件一样),您需要的第一件事是使用 networking library 以允许您的应用程序连接到服务器并检索数据。

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

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

一旦您的应用程序可以访问每个帧携带的所有有用信息(即图像尺寸和像素),您的应用程序将为从网络到达的每个帧创建一个UIImagewith this information,以便能够@ 987654329@.

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

【讨论】:

  • 嗨 karlphilllip,我不想在 iPhone 上使用 ffmpeg。我的想法是 iPhone 只会以 jpeg 图像的形式将视频帧发送到服务器,而服务器会做剩下的事情,比如将其编码成视频然后流式传输。
  • 那么 Approach 2 就是你要找的。​​span>
【解决方案2】:

其实有两种方法:

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

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

【讨论】:

  • 嗨,Alex,我不想要 flv 文件,我想将数据直接流式传输到观众的输出流
  • 那为什么不把 ffmpeg 换成 ffplay 呢?
猜你喜欢
  • 2020-10-27
  • 2019-02-25
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2012-10-02
  • 1970-01-01
相关资源
最近更新 更多