3

我无法使用 Android 的 MediaPlayer 播放某个 .3gp 文件(来自 Dropbox 链接)。但是,该文件可以从 Dropbox Android 应用程序神奇地播放而没有问题。

我正在尝试使用它来播放它:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.dropbox.com/s/zpiqwmxka6llavt/SketchyFile.3gp"));
startActivity(intent);

我的清单包含

<uses-permission android:name="android.permission.INTERNET" />

这给出了“无法播放此视频”错误。

错误截图

Logcat 显示:

I/NuCachedSource2(89): new range: offset= 2245017
I/ChromiumHTTPDataSource(89): connect to https://dl.dropbox.com/0/view/a1crokuhpprsaeo/SketchyFile.3gp @2245017
I/NuCachedSource2(89): ERROR_END_OF_STREAM
E/MediaPlayer(3629): error (1, -2147483648)
E/MediaPlayer(3629): Error (1,-2147483648)
D/VideoView(3629): Error: 1,-2147483648

如果我尝试从 Dropbox Android 应用程序播放它,Dropbox 的视频播放器播放它没有问题。

保管箱成功截图

根据 ffmpeg 的 ffprobe 工具,我可以验证媒体类型对 Android 来说不是奇特的东西。

Dropbox 是否在执行一些奇怪的转码伏都教,有没有办法让我以类似的方式进行这项工作?

编辑:这里有一些关于 DropBox 的编码 voodoo 的更多见解

4

2 回答 2

3

由于我既没有投递箱应用程序源,也没有访问实际文件的权限,所以我将根据几个假设做出最好的猜测。

本机应用程序无法播放该文件,因为它的格式无法在那里播放。你能说下载文件,把它放在sd卡里然后播放吗?如果不是,那么手机不支持这种格式。

为什么Dropbox播放器播放它?基于相同假设,我的猜测是 drop box 播放器在 jni 下方添加了自己的解码库(例如 ffmpeg )。所以它可以解码这个。

另一个可能的猜测:您正在尝试对 3gp 文件进行流式播放,这是不可能的。HTTP pd 播放可能是可能的。再次,下载并从sd卡播放,如果可以播放,那么可能就是这个问题。该文件可能不会被提示它需要是哪个文件。

投递箱正在播放这个,因为也许投递箱应用程序以某种方式通过其他一些api访问文件末尾的标题(你的巫术)?

同样,以上两个都是我看到的常见问题的猜测,因为我既没有 Dropbox 应用程序源,也没有访问您的文件或确切地知道您如何尝试使用本机播放器播放视频。也许上述提示之一有帮助。祝你好运!

编辑:看到的问题:Nexus S 不在本地或从 http 链接播放给定文件。事实证明,重新混合到 mp4 使得 Nexus S 可以双向播放。这意味着某些 android 设备的本地原生播放器中不存在 3gp 支持。

于 2012-12-10T21:27:05.813 回答
-1

您可以使用try-catch如下:

try
{
  VideoView videoView = (VideoView) findViewById(R.id.VideoView);         
  MediaController mediaController = new MediaController(this);
  mediaController.setAnchorView(videoView);
  // Set Audio/Video
  String strfilename = "http://example.com/video.mp4";
  Uri video = Uri.parse(strfilename);
  videoView.setMediaController(mediaController);
  videoView.setVideoURI(video);
  videoView.start();   
} 
catch (Exception e) 
{
  //enter code here
  //Handle Errors
} 
于 2014-11-12T08:00:28.417 回答