从iPhone到另一设备(浏览器或iPhone)的实时音视频流传输

16

我希望能将 iPhone 的实时视频传输到另一台设备(桌面浏览器或另一台 iPhone,例如点对点)。

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

我能想到以下四种方法...

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

  2. 在 iPhone 上捕获帧,将其转换为图像,发送到 HTTP 服务器,在浏览器中使用 JavaScript / AJAX 尽快重新加载服务器上的图像。

  3. 在 iPhone 上运行 httpServer,捕获持续 1 秒钟的视频,创建 M3U8 文件,让其他用户直接连接到 iPhone 上的 httpServer 进行实时流传输。

  4. 在 iPhone 上捕获持续 1 秒钟的视频,创建 M3U8 文件,发送到 httpServer,让其他用户连接到 httpServer 进行实时流传输。这是一个好答案,有人尝试过吗?

是否有更好、更高效的选择?如何尽快将数据从 iPhone 取出?它是 ASIHTTPRequest 吗?

谢谢大家。


你实现了这个吗?请帮帮我。 - Ramz
3个回答

14

直接发送原始帧或者单独的图片是行不通的(因为数据量和帧数过大)。从手机中合理地提供任何服务也不可能(因为 WWAN 网络有各种类型的防火墙)。你需要对视频进行编码,并通过标准的流媒体格式(RTSP,RTMP)将其流式传输到服务器上。 iPhone >= 3GS 上有一个 H.264 编码芯片。问题在于它并非面向流的。也就是说,它最后输出解析视频所需的元数据。这样会留下一些选择。

  1. 获取原始数据并使用 FFmpeg 在手机上进行编码 (会使用大量 CPU 和电池)。
  2. 为 H.264/AAC 输出编写自己的解析器(非常困难)。
  3. 按块记录并处理(会增加与块长度相等的延迟,并在每个块之间丢失约1/4 秒的视频,因为您要开始和停止会话)。

1
我花了很多时间在这上面,得出了相同的三个选择。很高兴看到我不是疯了(我选择了第三个)。 - jab
4
这里有人能给我提供实现这个的样例代码或指南吗? - Ramz
http://stackoverflow.com/questions/5062266/uploading-live-streaming-video-from-iphone/5601041 - Luda

5

“分块记录和处理(将增加与分块长度相等的延迟,每个分块开始和停止会丢失约1/4秒的视频)。”

我刚写了这样的代码,但可以通过重叠两个AVAssetWriters来消除这样的间隙。由于它使用硬件编码器,强烈建议采用此方法。


3

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

  • 我们决定使用OpenTok,并成功地通过OpenTok入门指南在iPad和网站之间实现了一个概念验证样式的视频聊天。对于我们来说,也有一个OpenTok的PhoneGap插件非常方便,因为我们没有进行原生iOS开发。

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

  • iDoubs 也被提出过,但我们认为OpenTok是最有前途的选择,因此没有更详细地研究iDoubs。


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