我正在通过 RMTP 流向我的服务器发送 JPEG 图像形式的视频帧。在服务器端,我想将流(ip + 端口)连接到 ffmpeg,以便它可以从流中抓取图像并从中创建视频流。
实际上,我的服务器正在监听传入帧的 IP 和端口。这部分完成了。我卡住的地方是如何使用 ffmpeg 将这些帧转换为视频流。谁能告诉我如何实现这一目标?我知道image2pipe
是我应该使用的,但我没有在 Google 上找到它的语法和文档。
最佳答案
在服务器端 ,您可以调用命令行应用程序ffmpeg
为您和stream the data 做繁重的工作.
客户端 ,我想讨论两种方法:
方法 1 : 使用 ffplay
在 iPhone 上连接到服务器并显示视频流。
优点 : 这是最简单和最快的解决方案!
FFmpeg was ported to the iPhone很久以前的一些人,所以你可以调用 ffplay
从 iPhone,告诉它连接到服务器,工作就完成了!查看Streaming a simple RTP audio stream from FFmpeg举个简单的例子。
缺点 : 好像there are legal issues involved on this matter ,所以有些人不建议使用 FFmpeg 分发您的应用程序。
方法二 : 写一个类似于 ffplay
的应用程序为 iPhone。
优点 :您可以使用自定义编码/解码程序来保护正在播放的数据,并让世界上的其他人使用您的播放器观看流媒体。
如果您正在流式传输真正的 JPEG(带有标题和所有内容,就像普通的 JPEG 文件一样),您需要的第一件事是使用 networking library允许您的应用程序连接到服务器并检索数据。
我建议,对于您的服务器接收到的每个新连接,它都会发送一个自定义 header (几个字节),通知客户端正在发送的每个帧的大小(因此客户端知道每个帧的大小)。
之后,应用程序将需要使用另一个库将传入数据解释为 JPEG 帧/文件。我现在可以想到 OpenCV,但我相信你可以找到更小的库。也许iOS为此提供了一个框架,但我真的不知道。
一旦您的应用程序可以访问每个帧携带的所有有用信息(即图像尺寸和像素),您的应用程序将创建一个 UIImage
with this information对于从网络到达的每一帧,能够display them on the screen .
缺点 :您将不得不从头开始创建一个应用程序,并且可能会在此过程中学习一些新的 API。
关于ffmpeg - 使用 ffmpeg 从服务器流式传输视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464956/