16

我想从 iPhone 获取实时视频到另一台设备(桌面浏览器或另一台 iPhone,例如点对点)。

注意:目前不是一对多,只是一对一。音频可以是流的一部分,也可以通过 iPhone 上的电话呼叫。

我能想到的方法有四种...

  1. 在 iPhone 上捕获帧,将帧发送到媒体服务器,让媒体服务器使用主机网络服务器发布实时视频。

  2. 在 iPhone 上捕获帧,转换为图像,发送到 httpserver,让浏览器中的 javascript/AJAX 尽快从服务器重新加载图像。

  3. 在 iPhone 上运行 httpServer,在 iPhone 上捕捉 1 秒时长的电影,在 iPhone 上创建 M3U8 文件,让其他用户直接连接到 iPhone 上的 httpServer 进行直播。

  4. 在 iPhone 上捕捉 1 秒时长的电影,在 iPhone 上创建 M3U8 文件,发送到 httpServer,让其他用户连接到 httpServer 进行直播。这是一个很好的答案,有人让它工作吗?

有没有更好、更有效的选择?从 iPhone 获取数据的最快方法是什么?是 ASIHTTPRequest 吗?

感谢大家。

4

3 回答 3

14

Sending raw frames or individual images will never work well enough for you (because of the amount of data and number of frames). Nor can you reasonably serve anything from the phone (WWAN networks have all sorts of firewalls). You'll need to encode the video, and stream it to a server, most likely over a standard streaming format (RTSP, RTMP). There is an H.264 encoder chip on the iPhone >= 3GS. The problem is that it is not stream oriented. That is, it outputs the metadata required to parse the video last. This leaves you with a few options.

  1. Get the raw data and use FFmpeg to encode on the phone (will use a ton of CPU and battery).
  2. Write your own parser for the H.264/AAC output (very hard)
  3. Record and process in chunks (will add latency equal to the length of the chunks, and drop around 1/4 second of video between each chunk as you start and stop the sessions).
于 2011-04-19T23:33:46.360 回答
5

“以块的形式记录和处理(将增加等于块长度的延迟,并在您开始和停止会话时在每个块之间减少大约 1/4 秒的视频)。”

我刚刚写了这样的代码,但是通过重叠两个 AVAssetWriter 来消除这样的差距是完全有可能的。由于它使用硬件编码器,我强烈推荐这种方法。

于 2012-12-21T04:49:52.880 回答
3

我们有类似的需求;更具体地说,我们希望在 iOS 设备和 Web UI 之间实现流式视频和音频。目标是在使用这些平台的参与者之间实现高质量的视频讨论。我们对如何实现这一点进行了一些研究:

  • 我们决定使用OpenTok并设法使用OpenTok 入门指南在 iPad 和网站之间快速实现概念验证式视频聊天。还有一个用于 OpenTok 的 PhoneGap 插件,这对我们来说很方便,因为我们不是在做原生 iOS。

  • Liblinphone似乎也是一个潜在的解决方案,但我们没有进一步调查。

  • iDoubs也出现了,但同样,我们认为 OpenTok 是最有希望满足我们需求的一个,因此没有更详细地研究 iDoubs。

于 2012-12-20T21:48:09.230 回答