如何在Android上使用VLC播放器播放视频?

6

我有一个安卓播放视频的应用程序,类似于:

https://play.google.com/store/apps/details?id=com.vlcforandroid.vlcdirectprofree&hl=en

我想将这个应用程序集成在我的应用程序中。我有视频流的URL,并希望在这个应用程序(Vlc Direct)中打开此视频。有什么好主意吗?

我使用以下方法打开这个应用程序:

Intent i = new Intent(Intent.ACTION_MAIN);
            PackageManager manager = getPackageManager();
            i = manager.getLaunchIntentForPackage("com.vlcdirect.vlcdirect");
            i.addCategory(Intent.CATEGORY_LAUNCHER);
            startActivity(i);

但是,它如何开始与视频流媒体相关,或者其他任何用于视频流媒体的播放器?

VLC播放器的Android版本存在一个漏洞,我也遇到了同样的问题,并发现有人已经在vlc.org的漏洞列表中发布了此问题,但在新版本2.0.6中,该漏洞仍未修复!vlc.org提供了调用vlc应用程序的意图示例代码,但它根本无法使用http或ftp。 - danscort_yu
3个回答

3
更像是,
Intent i = new Intent(Intent.ACTION_MAIN);
i.setComponent(new ComponentName("com.vlcdirect.vlcdirect", "com.vlcdirect.vlcdirect.URLStreamerActivity"));
i.putExtra("url", url);
startActivity(i);

假设组件、活动和有效负载如图所示,并且活动已显式或隐式导出 - 我不知道实际值,或者活动是否已导出。vlcdirect没有记录这一点,但您可以:
  1. 询问开发人员,或

  2. 在从该应用程序的URL流式传输时查看日志,以确定组件和活动; dedex和反编译.apk,以确认有效负载;如果需要,请复制有效负载类;如果活动未导出,则放弃并对开发人员不予理睬。

理想情况下,您会广播一个“查看此网址的流”意图,而vlcdirect或任何其他适当的应用程序将选择它,但我不知道vlcdirect或任何其他应用程序是否会响应此类意图。


在回答的第二行中,com.vlcdirect.vlcdirect.URLStreamerActivity是什么? - Samir Mangroliya
@Samir,只是我的猜测。你需要确定活动的实际名称。 - Julian Fondren
如何检查VLCDirect的活动? - Samir Mangroliya
@Samir,我建议一种方法:在vlcdirect中查看流,并使用adb logcat或市场上的Catlog应用程序检查系统日志。您将看到启动播放视频的活动的意图 - 但不包括其有效负载。 - Julian Fondren
@Samir,这是你的第三个问题,我已经在我的原始答案中回答了。请努力理解已经说过的内容。 - Julian Fondren
显示剩余4条评论

3

VLC需要明确告知类型:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setPackage("org.videolan.vlc.betav7neon");
i.setDataAndType(Uri.parse("http://ip:8080"), "video/h264");
startActivity(i);

即使是"video/*"对我也不能起作用。

2
如果您使用setClass org.videolan.vlc.betav7neon.gui.video.VideoPlayerActivity,则可以删除mime信息。 - Daniel F

2

之前的答案对我没有用。在搜索了一段时间后,我找到了官方文档

基本上,这就是:

int vlcRequestCode = 42; //request code used when finished playing, not necessary if you only use startActivity(vlcIntent)
 Uri uri = Uri.parse("file:///storage/emulated/0/Movies/KUNG FURY Official Movie.mp4"); //your file URI
 Intent vlcIntent = new Intent(Intent.ACTION_VIEW);
 vlcIntent.setPackage("org.videolan.vlc");
 vlcIntent.setDataAndTypeAndNormalize(uri, "video/*");
 vlcIntent.putExtra("title", "Kung Fury");
 vlcIntent.putExtra("from_start", false);
 vlcIntent.putExtra("subtitles_location", "/sdcard/Movies/Fifty-Fifty.srt"); //subtitles file
 startActivityForResult(vlcIntent, vlcRequestCode);

您可以删除对您无用的部分。


这是唯一对我有效的答案..谢谢! - supersan

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