视频赢得';不要玩Android';s原生MediaPlayer,但它使用Dropbox';s视频播放器

视频赢得';不要玩Android';s原生MediaPlayer,但它使用Dropbox';s视频播放器,android,ffmpeg,video-streaming,media-player,dropbox,Android,Ffmpeg,Video Streaming,Media Player,Dropbox,我在用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")

我在用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" />
如果我尝试从Dropbox Android应用程序播放它,Dropbox的视频播放器播放它没有问题

根据ffmpeg的ffprobe工具,我可以验证媒体类型对Android来说不是什么异国情调

Dropbox是否正在执行一些奇怪的转码巫毒,我有没有办法以类似的方式完成这项工作


编辑:这里还有一些。

因为我既没有drop box应用程序源,也没有访问实际文件的权限,所以这里是我根据几个假设做出的最佳猜测

本机应用程序无法播放该文件,因为其格式无法在本机应用程序中播放。你能说下载文件,把它放在sd卡上,然后播放吗?如果不支持,则手机不支持此格式

为什么dropbox播放器会玩它?基于同样的假设,我猜测drop box player会在jni下面添加自己的解码库(例如ffmpeg)。所以它可以解码这个

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

dropbox之所以这么做,可能是因为dropbox应用程序正在通过其他api访问文件末尾的标题(你的巫毒)

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


编辑:看到问题:Nexus S不在本地或从http链接播放给定文件。事实证明,重新升级到mp4让Nexus S双管齐下。这意味着在一些安卓设备的本地本地播放器中没有3gp支持

您可以使用
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
} 

你能直接播放SD卡上的视频吗?有没有可能这只是一个身份验证问题,即视频不是公开的,因此在登录后dropbox应用程序可以访问,但不是作为原始url传递给另一个没有dropbox登录会话的安卓组件?不太可能,因为我故意将视频公开,并且可以通过新的浏览器会话访问它。似乎涉及到URL重定向(logcat中的dropbox URL不同),但将其设置为其中任何一个都没有区别。感谢您的回复,我也将把它归于dropbox voodoo。我故意将视频文件公开以供进一步分析,是否无法访问?你试过用本地sd卡玩吗?将其下载到手机并播放。如果你想在3gp上做流媒体,那就行不通了。该文件是可访问的。没有暗示。因此,如果您正在进行伪流,可能需要提示。如果未提示3gp文件且播放器不支持伪流,则尝试播放带有3gp文件的http链接将无法工作。从SD卡本地播放该链接是不确定的,它在Galaxy S2上播放,但在Nexus S上播放(但使用dropbox在两者上播放)。不过,你最后的评论让我走上了正确的轨道。似乎该文件位于mov容器中,而不是mp4容器,据我所知,无法通过http.Nachi可靠地流式传输,即使是mp4也无法流式传输,除非它是伪流式传输。我想你的问题是没有暗示。顺便说一句,Nexus S没有用本地播放器玩,我也可以确认。如果升级到mp4文件,它将从sd卡播放,并作为另一台服务器的http链接播放(这两种功能在之前都不可能实现)。这仅仅意味着您的drop box应用程序具有natvie player不具备的对3gp的本机支持。
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
}