2010-03-02 49 views
2

我已经开发了一个小型应用程序,可以通过VideoView小部件(我试过)从rstp流式服务器播放视频(在这种情况下是达尔文,但这不相关) Mplayer + SurfaceView方法)。我使用Wifi连接。Android上的后台任务流式视频播放性能问题

视频是唯一的任务时,视频播放才算顺利。小应用程序应同时执行其他任务,例如不断发现蓝牙设备并调用远程Web服务(我正在使用Ksoap2)。当这些背景采集与视频播放同时运行时,的性能令人难以置信地下降了(图像和声音有时停止,图像变形,显示的是相当大的方块而不是合适的帧)。

即使是低质量的视频(50kbps下的3gp)也会发生这种情况。对于蓝牙发现我已经使用,没有性能增强了彼此都可用的方法:

  • 使用SDK提供5路发现并登记每发现蓝牙设备。
  • 对自写的scan()方法使用本机调用,该方法利用Bluez API提供的hci_inquiry()函数。

对WS的调用请求发现设备的蓝牙地址。呼叫在发现结束后发生。

我试着用GLSurfaceView代替SurfaceView,但是因为我对Android平台比较陌生,没有3D图形编程里程,所以我无法使它工作,因为我找不到任何如何使用的例子OpenGL ES可以播放视频,并且仍然可以让Android API控制其他UI相关的东西(对话框/菜单/ Toasts)。另一方面,我不知道这是否确实可以改善播放。

我可以采取的任何线索或提示?

编辑:我忘了说,我在摩托罗拉Milestone

编辑2发展:继CommonsWare和snctln建议,我试图在没有完全离开了SOAP WS调用,以尽量减少应用程序的内存占用。

现在我尝试缓存尽可能多的对象,并且只有在发现新的BT设备(WS需要发现的BT设备作为输入)时才执行呼叫以最小化GC呼叫。只有蓝牙发现活动(根本没有WS呼叫),视频仍然会发挥很大作用。

编辑3:解决方案:我修改了我的应用程序,以便在扫描蓝牙设备时使用UMTS(3G)数据连接而不是Wifi。尽管设备访问公共互联网(m.youtube.com),但其播放的流媒体视频比3G(来自公共互联网服务器)播放流视频要远远超过本地Wifi(来自本地流媒体服务器)。本地流媒体服务器的性能不是问题,因为流式传输到台式电脑运行良好。我还将设备固件升级到2.0.1,并且在本地WiFi连接方面也有所改进,但是3G播放性能仍然胜过Wifi。

我的结论是,当使用同时的Wifi /蓝牙通信时,该设备必须有一些冲突的硬件(可能是相同的芯片组)或软件问题。

回答

1

请注意,摩托罗拉Milestone的CPU速度和PC的内存大约在12 - 15年前。

任何线索或我可以 的方式提示?

转储SOAP并使用轻量级Web服务协议(例如,JSON over REST)。降低执行此项工作的线程的优先级,以便它们不会与处理视频播放的线程干扰太多。在您的蓝牙扫描中尽可能多地添加“呼吸时间”,而不是连续执行代码以尝试发现设备。

假设不能解决问题,请使用traceview和类似工具来尝试优化后台线程(可能没有运行视频)。

+0

我已经给予主线程(我认为是UI的一个)的最大优先级,并且创建用于执行BT扫描的最小优先级(当使用本地方式时)并且调用WS和视频回放没有足够的结果性能改进。可能真正影响视频播放的是系统调用(发现网络套接字上的BT设备和I/O),但不确定。难道不可能使用GPU硬件加速,所以CPU开销并不重要? – 2010-03-02 14:08:08

+0

它已经使用GPU硬件加速。但是,如果我不得不猜测,您的问题更多的是流媒体方面 - 读取数据并对其进行解码。 – CommonsWare 2010-03-02 14:13:01

+0

另外,不要混淆你没有创建的线程的优先级(根据你的“主线程(我认为是UI的最大优先级)”评论)。 – CommonsWare 2010-03-02 14:13:53

1

你可以做的一件事就是看看你的内存分配情况。大约一年前,我在游戏中遇到显示性能问题,每隔2秒钟左右就会出现大量“延迟”。我发布到android开发人员Google小组,并获得了一些关于从Android工程师之一追踪问题的指针。他后来放在一起this blog post细节跟踪内存分配的过程,这是跟踪很重要,因为我看到的滞后直接归因于垃圾收集。现在我将分配保持在最低限度,这种滞后发生的频率要低得多。

另外我同意马克(CommonsWare),如果你可以转储肥皂轻量级协议,你可能会看到一些改进的性能。

+0

我试图做你建议没有运气。蓝牙发现过程(内置Android SDK)似乎与视频一起繁重。也许这可能是一个硬件问题(相同的BT和WIFI芯片组)? – 2010-03-03 15:27:12