joh*_*k95 8 iphone streaming tcp video-streaming ios
我正在开发一款适用于iOS的应用程序,其中一部iPhone必须将其摄像头录像直播到另一部iPhone(为了简单起见,两者都在同一个Wi-Fi网络中).
流应该在没有物理互连的情况下工作(例如,用于将流路由到客户端的服务器).实际上,录制iPhone应该是服务器,它通过直播流为其他iPhone(或网络中的其他iOS设备)提供服务.
所以,我需要做的是:
我有什么和我坚持的:
我已经解决了问题1.我使用了一个AVCaptureSession不断返回CMSampleBufferRef的(在这里找到).
我不太确定我需要做什么CMSampleBufferRef.我知道如何将它转换为a CGImage或a UIImage(感谢Benjamin Loulier的伟大博客2),但我不知道具体需要发送什么,以及我是否需要以某种方式对帧进行编码.
正如@jab在上面链接的答案(this)中提到的那样,可以将这些样本写入具有一个或多个的文件AVAssetWriter.但他再说,这些5秒的视频片段将被上传到服务器,该服务器制作一个可流式电影文件(然后HTTP Live Streaming我认为该电影可以流式传输到iOS设备).
正如我已经指出的那样,我的应用程序(即视频捕获"服务器"设备)有一个或多个客户端连接到它,需要实时发送视频帧给他们.
我想到的一个想法是使用一个简单的TCP连接,其中服务器以序列化格式将每个帧发送到循环中的连接客户端.更具体地说:当一个缓冲帧成功发送到客户端时,服务器将最近的帧作为下一个要发送的帧.
现在:这是正确的想法它应该如何运作?或者是否有另一种协议,它更适合这种任务?
记住:我想保持简单(对我来说简单,即,我不需要研究太多新的编程方面)和快速.我已经了解了一些关于TCP的事情,我在学校写了服务器和客户端C,所以我更愿意将我现有的知识应用到这个项目中......
最后但并非最不重要的,接收客户端:
我想,如果我真的要使用一个TCP连接,即在客户端我从服务器帧后接收帧,投读取字节包入使用的格式(CMSampleBuffer,CGImage,UIImage)只是在一个CALayer或UIImageView右边显示它?只需不断更新图像视图,即可获得电影的效果.
请告诉我如何实现这一目标的一些想法.这是非常重要的,因为它是我的学校毕业项目的一部分......任何示例代码也很受欢迎;-)或者只是引用我到另一个站点,教程,Stackoverflow-answer等.
如果您对此有任何疑问,请发表评论,我会更新帖子.
听起来不错?
视频帧真的很大.您将遇到带宽问题,将视频从一个设备流式传输到另一个设备.您可以JPEG使用UIImageJPEGRepresentationa 来压缩框架UIImage,但这在"服务器"上的计算成本很高,并且仍然可能无法使它们足够小以便流畅.您还可以通过删除帧,缩减UIImages,以及摆弄您的设置来降低帧速率和/或分辨率AVCaptureSession.或者,您可以发送小型(5秒)视频,这些视频在服务器上进行硬件压缩,并且更容易处理带宽,但当然会在流中提供5秒的延迟.
如果您可以要求iOS 7,我建议您尝试MultipeerConnectivity.framework.设置并不是非常困难,我相信它支持多个客户端.如果要打开自己的网络,绝对使用UDP而不是TCP - 这是UDP的教科书应用程序,它具有较低的开销.
逐帧,只需将JPEGs转换为UIImages并使用UIImageView.涉及到重要的计算,但我相信你仍然会受到带宽而不是CPU的限制.如果您要发送小视频,则可以使用MPMoviePlayerController.每个视频之间可能会有很少的故障,因为它"准备"它们进行播放,这也需要5.5秒左右才能播放每个5秒的视频.我不建议使用HTTP Live Streaming,除非你可以在某个地方使用真正的服务器.或者您可以使用ffmpeg管道 - 输入视频并弹出单个帧 - 如果您可以/想要编译ffmpegiOS.
如果您需要澄清以上任何一点,请与我们联系.这是很多工作,但相对简单.
| 归档时间: |
|
| 查看次数: |
5247 次 |
| 最近记录: |