我使用CastCompanionLibrary通过从VideoCastManager.java调用queueInsertItems()将项目添加到RemoteMediaPlayer队列中,如下所示:
queueInsertItems(unique_items,MediaQueueItem.INVALID_ITEM_ID,customData);
最初的几个请求通过了,但是几次之后,我开始获取TransientNetworkDisconnectionException,所有后续的请求都返回状态码2103(REPLACED)。在这一点上,我无法再将项目添加到媒体队列中,直到我断开连接并重新连接回投射设备。
这是我的logcat的副本:
01-28 00:24:56.750 7185-7185/com.google.sample.cast.myplayer D/ccl_VideoCastManager: [v2.7.1] > queueInsertItems returned. Status code: 2103
01-28 00:24:56.789 455-469/? I/SurfaceFlinger: id=5534(5) createSurf 0x41449a94 (1x1),1 flag=4, Uoast
01-28 00:24:56.805 463-1700/? D/PowerManagerService: [api] acquire WakeLock flags=0x2000000a > tag=WindowManager uid=1000 pid=463
01-28 00:24:56.891 7185-7189/com.google.sample.cast.myplayer D/dalvikvm: GC_CONCURRE> NT freed > 1843K, 28% free 18679K/25856K, paused 4ms+16ms, total 201ms
01-28 00:24:57.008 28371-12138/? D/CastSocket: [controller-0688 API] IOException encountered. > Tearing down the socket.
java.io.IOException: invalid message size (138391) received.
at com.google.android.gms.cast.c.o.n(SourceFile:457)
at com.google.android.gms.cast.c.o.j(SourceFile:686)
at com.google.android.gms.cast.c.v.b(SourceFile:35)
at com.google.android.gms.cast.c.w.run(SourceFile:103)
at java.lang.Thread.run(Thread.java:856)
01-28 00:24:57.016 28371-12138/? D/CastSocket: [controller-0688 API] shutdown with reason=2
01-28 00:24:57.016 28371-28371/? D/CastDeviceController: [controller-0688 API] onDisconnected; > socketError="2 IO Error"
01-28 00:24:57.023 28371-9680/? D/CastDeviceController: [controller-0688 API] > onSocketDisconnectedInternal: socketError="2 IO Error"
01-28 00:24:57.023 28371-9680/? I/CastDeviceController: [controller-0688 API] finishDisconnecting; > socketError="2 IO Error", mDisconnectStatusCode=SUCCESS
01-28 00:24:57.023 28371-9680/? I/CastDeviceController: [controller-0688 API] listener.> onDisconnected(NETWORK_ERR
我在logcat中注意到的一件事是,由于消息大小无效,CastSocket API一直由于原因2而关闭。我不确定这意味着什么或为什么会发生。但是有人可以解释一下发生了什么吗?
提前致谢!
使用通用消息传输每个请求/ api,并且每个消息都具有最大大小;您应该假设有效负载不能超过64k,但请记住,一条消息是由一堆东西组成的,它们很容易累加。您看到的有关无效邮件大小的错误使我认为您正在遇到该问题。尝试发送较少的项目。另外,请注意,使用当前结构,仅将500个项目的队列分解为20个消息(每个消息有25个项目)是不够的。尽管您可以这样做,但是由于接收者发送给连接的发送者的所有更新消息也遵循相同的大小限制,因此您很快就会遇到问题,因此如果需要报告大量项目,它们将失败。鉴于目前的局限性,可能是最好的选择 如果您能够以某种方式管理队列,使得接收器在每个时刻都不会在内存中保存过多的项目,而同时又知道如何在(云)后端获取更多项目它需要。您还可以考虑在发送方进行更多管理,以避免将过多的队列项目推入接收方的队列中,并卸载一些队列项目并添加一些新的项目以使内存中的总数保持较低水平。尽可能少地发送给接收者的每个项目的信息;例如,您的接收器可能不需要使某个项目的所有字段/元数据都可用,或者在电视上具有UI结构的情况下,它可能无法显示超过100个字符的任何说明,例如,将信息修整为接收者绝对需要的东西。然后,在发送方,
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句