VideoView 和渐进式下载

5
在我的应用程序中,我需要为用户提供渐进式下载(视频文件)的预览。
为了实现这一点,我使用VideoView组件来显示正在下载的视频(.mp4,.3gpp)的内容。
问题在于我无法通过http://或rtsp://协议访问远程媒体,因此我被迫在下载时使用VideoView.setVideoPath播放视频的本地副本。
不幸的是,在Android设备上,不能正确处理渐进式下载的VideoView似乎只能播放组件初始化期间识别的视频部分,这在我的经验中包括OpenCore和一些基于Tegra2的设备。
因此,明确一下:如果用户在仅下载了5%的视频时按下“播放”按钮,则VideoView仅会显示该5%的视频,即使在此期间已经下载了更多的视频内容。
在我的经验中,这个问题不会影响使用StageFright框架的设备(例如:Nexus One 2.2,Nexus One 2.3.4)。
有人能指出可能的解决方案吗?谢谢。

你好,你找到解决这个 bug 的方法了吗?我也遇到了同样的错误。现在我卡在这里了。 - Huy Tower
最后,我们找出了原因并得到了解决方案。在这里。谢谢! - Huy Tower
2个回答

2

如果您尝试播放.h264格式的文件,需要将MOV原子移动到文件的前面。这些原子会告诉编解码器电影的长度等信息。

可以尝试使用qtfaststart工具。

http://ffmpeg.zeranoe.com/builds/


你好,你找到解决这个 bug 的方法了吗?我也遇到了同样的错误。现在我卡住了。你能给我一些完成这个任务的方法吗?我想要流式下载视频。附注:我可以将视频编码为 .h264,上传到网站上,而且我相信我的代码也很好。设备:三星 Galaxy 7" 2.2.1。 - Huy Tower

1

VideoView是Android应用框架中一个现成的类,用于视频播放场景。它内部使用MediaPlayer类来实现播放。MediaPlayer基于特定标准(如文件格式、内容来源等)在内部使用可用的媒体框架进行处理。

因此,限制来自底层框架而不是VideoView。如果你仍然怀疑VideoView,请使用MediaPlayer编写自己的视频播放器活动。结果将是相同的。

另外,并非所有版本的Android(即stagefright)都支持渐进式下载。

也许你可以使用DownloadManager类从http服务器下载内容,并为快速预览提供路径给媒体播放器/视频视图。

Shash316


是的,该问题影响了MediaPlayer(因此也影响了VideoView)下的不同媒体框架。通过DownloadManager下载视频无法解决问题(我已经尝试过了),因为该问题与底层媒体框架处理视频缓冲区的方式有关。无论如何,还是非常感谢您的帮助。 - a.bertucci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接