大家好,我希望你能帮助我解决这个问题。
问题: 我有一个 RTP 流,我在我的专用网络 (WiFi) 上进行多播。我想使用一些 android 平板电脑来显示流。平板电脑的数量不能被限制,并且质量不应该随着客户数量的增加而下降。这解释了为什么我需要多播而不是单播。
方法: 理论上,通过在服务器端创建 RTSP 或 HTTP 流,我应该能够将视频提供给我的客户。但是,我的理解是,当太多客户端同时连接时,服务器会受到性能影响,我需要避免这种情况。理想情况下,我希望所有客户端都简单地收听相同的多播。这样,客户端的数量对服务器性能没有影响。[注意:IP 是本地的,并且 TTL 设置为 0/1,因此除了我自己的网络之外,没有任何危险会被多播数据包阻塞。]
实现 为了实现上述方法,我想在 Android 中编写一个多播客户端,接收 RTP 数据包并将流拼接在一起。我用 JPEG 有效载荷尝试了这个,效果很好。然而,JPEG 的问题在于,对每一帧进行解码的BitmapFactory.decodeByteArray调用非常昂贵(几乎 100 毫秒!),这极大地限制了帧速率。网络上的负载也相当高,因为 JPEG 不是一个好的视频流协议。
我想做的是为视频做我已经为图片做的事情,即将来自 RTP 数据包的有效负载流(例如 MPEG4)拼接在一起并将其提供给“某物”。最初我认为 VideoView 可以使用原始输入流,但我错了,VV 似乎只能使用 rtsp 或 http url(正确吗?)。
解决方案? 现在,我有什么选择?由于上述原因,我想避免从原始 RTP 流设置 RTSP 服务器并为所有平板电脑提供服务。我确实环顾了 2 天,并检查了 SO 和网络上提出的所有解决方案,但似乎没有任何问题适用于我的问题(在大多数情况下,RTSP url 或单播是解决方案,但我认为我不能使用它)所以我想是时候问这个问题了。
非常感谢任何帮助!
干杯