大多数sim账号是公共动态的。大多数(如果不是全部的话)蜂窝网络提供商不允许传入连接到公共动态ip地址。(反正是3g,可能不是4g/LTE)连接的问题不是动态ip,而是被阻塞的传入端口。
所以,如果我想按需从android手机上传输视频(基于从这个对话中收集的信息(从android相机传输视频到服务器)),正确启动连接的事件链将是什么?
我的想法(大致):
- android手机上的应用程序启动并保持与媒体服务器(wowza或其他)的某种连接。
- 在某个时刻,当服务器想要从手机上获得视频时,它使用打开的连接来请求视频流。
- Android手机推送rtsp流到服务器。
这是正确的吗?如果是,我应该使用什么类型的连接作为永久控制连接?此外,是否有可能推动rtsp或我必须做其他事情?
谢谢!
我知道这是一个古老的问题,但如果有人正在搜索类似的东西,现在可以使用以下内容:
http://developer.android.com/guide/google/gcm/index.html这基本上允许消息从服务器发送到Android设备上的应用程序(它取代了做类似事情的C2DM)。
Google GCM现在已被Google Firebase Cloud Messaging取代:
- https://firebase.google.com/docs/cloud-messaging/
使用这样一个基于应用程序的消息传递服务,步骤是:
- 添加消息订阅服务到你的应用程序(例如Firebase)
- 应用程序在启动时注册云消息服务
- 当服务器需要手机视频时(如上面的问题所述),服务器向应用程序发送消息
- 应用打开与流媒体服务器的连接,并开始向服务器传输视频。
注意:下面有一个关于这种方法如何不允许从服务器到Android手机的传入连接的评论。
事实上,这并不是手机流媒体的典型工作方式。手机实际上与流媒体服务器建立了一个"外向"连接,然后将视频传输到流媒体服务器。其他设备想看视频,然后从这里流。
为什么这是首选的方法有几个原因,其中一个关键的原因是支持一个高质量的流媒体服务,可以在大多数常见的设备,浏览器,操作系统等上播放,需要将视频转码成多个比特率,甚至在某些情况下进行编码,并以适当的流媒体包装格式打包和服务。在移动设备上执行所有这些操作将占用大量的计算和存储资源。