2012-04-16 74 views
3

大家好,我希望你能帮助我解决这个问题。在Android上解码RTP流(MPEG4)

问题: 我有一个RTP流,我在我的专用网络(WiFi)上进行组播。我想使用一些Android平板电脑来显示流。平板电脑的数量不能受到限制,质量不应随着客户数量的增加而降低。这解释了为什么我需要多播而不是单播。

的方法: 理论上通过创建服务器端的RTSP或HTTP流我应该能够对影片给我的客户。然而,我的理解是,当有太多的客户端同时连接时,服务器会受到性能影响,这是我需要避免的。理想情况下,我希望所有客户都只是在监听相同的多播。这样,客户端数量就不会对服务器性能产生影响。 [注:IP是本地和TTL设置为0/1所以没有堵塞任何东西比我自己的网络与多播数据包的危险。]

实施 为了实现上面的方法我认为在Android中编写一个多播客户端,它接收RTP数据包并将这些数据流缝合在一起。我试图用JPEG有效载荷,它工作得很好。然而,JPEG的问题是调用来解码每帧的代价是非常昂贵的(几乎100ms!),这大大限制了帧速率。由于JPEG不是一个好的视频流协议,因此网络上的负载也很高。

我想要做的是为视频做什么,我已经为图片做了什么,即将来自RTP数据包的有效载荷流(例如MPEG4)拼接在一起并将其馈送到“某物”。最初我以为VideoView可以处理原始输入流,但我错了,VV似乎只能使用rtsp或http url(正确?)。

解决方案? 现在,我有什么选择?我想避免从原始RTP流设置RTSP服务器,并出于上述原因为所有平板电脑提供服务。我查了两天,检查了在网上和网上提出的所有解决方案,但似乎没有什么适用于我的问题(在大多数情况下,RTSP url或单播是解决方案,但我认为我不能使用它),所以我认为是时候问这个问题了。

任何帮助非常感谢!

欢呼

回答

0

我们必须试图在Android上玩RTSP蒸MJPEG的一个问题。我们所拥有的多播视频服务器无法通过HTTP发送MJPEG,我们也不希望因为延迟而在RTSP上使用H.264。该应用程序是一个ROV将现场视频发送回Droid进行显示。 只是为了节省很多麻烦,如果我正确地理解了这个问题,你根本无法使用Android SDK中的任何东西,比如MediaPlayer等。最后,我们通过付钱让一个人做了一些自定义代码使用MPlayer,ffmpeg和Live555。 希望这有助于。

1

再次阅读您的文章后,我拿起了我第一次错过的东西。我使用BitmapFactory.decodeByteArray从Axis相机组播中通过HTTP传输MJPEG。该呼叫可以在几ms内完成。存在的问题是,它通常希望每次调用都创建一个新的位图。有一种方法可以使位图保持不变,并且可以缩短时间。我只是不记得这个电话,我正常的开发电脑目前正在销毁......错误,由我们的IT'升级',所以我不能告诉你我的头顶,但你应该找到它,如果你搜索一下。我能够在Xoom和Galaxy Tab 10.1上获得30fps,而其他一些则没有问题。

马克谢恩 [email protected]

1

OK,我检查,我使用的重载BitmapFactory.decodeByteArray使用一个不变的位图与BitmapFactory.Options设置InBitmap标志。可能是我必须为Bitmap本身做的其他事情,可能至少使它成为Static。也许还有一些其他的标志也设置好了,但你现在应该有足够的耐心。

+0

非常感谢,我会给它更多的想法 – Lele 2012-05-25 12:44:29