4

我想我在 Blackberry 9000 模拟器上错误地使用了 InputStream:

我找到了一些示例代码,

http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800332/1089414/How_To_-_Play_video_within_a_BlackBerry_smartphone_application.html?nodeid=1383173&vernum=0

可让您从黑莓应用程序中播放视频。该代码声称它可以处理HTTP,但它需要一些花哨的东西才能让它真正接近这样做:

http://pastie.org/609491

具体来说,我正在做:

 StreamConnection s = null;
            s = (StreamConnection)Connector.open("http://10.252.9.15/eggs.3gp");
            HttpConnection c = (HttpConnection)s;                        
           InputStream i = c.openInputStream();
            System.out.println("~~~~~I have a connection?~~~~~~" + c);
            System.out.println("~~~~~I have a URL?~~~~" + c.getURL());
            System.out.println("~~~~~I have a type?~~~~" + c.getType());
            System.out.println("~~~~~I have a status?~~~~~~" + c.getResponseCode());

            System.out.println("~~~~~I have a stream?~~~~~~" + i);
             player = Manager.createPlayer(i, c.getType());

我发现这是我可以从 HTTPConnection 获取 InputStream 而不会导致:“JUM 错误 104:未捕获的 NullPointer 异常”的唯一方法。(也就是说,作为 StreamConnection 的转换,然后作为 HttpConnection 阻止它崩溃)。

但是,我仍然没有流式传输视频。之前,无法创建流(它会因空指针异常而崩溃)。现在,正在制作一个流,调试器声称它开始从中流式传输视频......并且没有任何反应。没有视频播放。

该应用程序不会冻结,崩溃或任何事情。我可以自由地“暂停”和“播放”,并为两者获取适当的调试消息。但是没有视频出现。

如果我正在播放本地存储在黑莓上的视频,一切都很好(它实际上播放视频),所以我知道播放器本身工作正常,我只是想知道我的流是否有问题?

API 说播放器可以接收 InputStream。它需要特定的种类吗?如何查询我的输入流以了解它是否有效?它的存在比我以前得到的要远。

-珍妮

编辑:我在黑莓 Bold 模拟器(9000)上。我听说某些版本的手机不通过 HTTP 流式传输视频,但是 Bold 可以。不过,我还没有看到这样的例子。当我上网并指向一个黑莓可播放视频时,它会尝试流式传输,然后要求我物理下载文件(然后在我下载后正常播放)。

编辑:另外,我也有一个实体黑莓 Bold,但它也不能流式传输(我去了 m.youtube.com,只是得到一个服务器/内容未找到错误)。我需要做些什么来流式传输 RTSP 内容吗?

4

3 回答 3

2

因此,很长一段时间后,我确定 Blackberry Bold 9000 不支持 http 流。我最终不得不(或者更确切地说我的一个同事不得不)编写自定义方法来进行渐进式下载来模拟它。那好吧。

于 2009-10-23T17:12:03.517 回答
1

您是否使用 MDS 作为网关?如果是这样,您会收到 HTTP 413 错误吗?如果是这样阅读这篇文章:

http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800332/800431/How_To_-_Download_large_files_using_the_BlackBerry_Mobile_Data_System.html?nodeid=1371855&vernum=0

于 2009-09-25T01:39:35.757 回答
1

您实际上应该能够流式传输。首先,您必须确保将正确的连接参数附加到您的 URL(即,“;interface=wifi” 用于 wifi 连接)。其次,您必须确保您正在流式传输的文件不会太大。如果它太大,您将收到一条 HTTP 错误,指出“文件太大”。为了解决这个问题,您需要缓冲一些东西(查看 DataSource API)。您应该将请求的内容限制在 1-2MB 左右。拉出那个“块”后,您需要继续请求顺序块(具有单独的 http 连接)以继续填充缓冲区。我希望这有帮助

于 2010-10-15T02:56:57.350 回答