【问题标题】:Android how to play video using VLC Player?Android 如何使用 VLC Player 播放视频?
【发布时间】:2012-02-13 10:46:51
【问题描述】:

我有一个应用程序可以在 android 中播放视频,比如 as

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播放器有一个bug,我也有同样的问题,发现有人已经在vlc.org的bug列表中发布了这个,但是在2.0.6的新版本中,该错误仍未修复! vlc.org 给出了通过意图调用 vlc 应用程序的示例代码,但它根本无法与 http 或 ftp 一起使用。

标签: android video-streaming


【解决方案1】:

更像,

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,以确认有效载荷;如有必要,重复有效载荷类;开发者无视你后,放弃和生气,如果活动没有导出。

理想情况下,您会广播“查看来自该 URL 的流”意图,并且 vlcdirect 或任何其他合适的应用程序会接收它,但我不知道 vlcdirect 或任何其他应用程序是否对此做出响应。

【讨论】:

  • 在回答第二行什么是 com.vlcdirect.vlcdirect.URLStreamerActivity
  • @Samir,一个猜测,正如我所说。您需要确定活动的实际名称。
  • 我如何检查 vlcdirect 的活动?
  • @Samir,我建议了一种方法:在 vlcdirect 中查看流,然后使用 adb logcat 或市场上的 Catlog 应用程序检查系统日志。您将看到启动播放视频的 Activity 的意图,但看不到其有效负载。
  • thnx,但无法播放视频..来源.. Intent i = new Intent(Intent.ACTION_MAIN); i.setComponent(new ComponentName("com.vlcdirect.vlcdirect", "com.vlcdirect.vlcdirect.VLCDirect")); i.putExtra("url", "http://www.tnp.sg/fk/lionscheers//test/MOV00675.3gp"); startActivity(i);
【解决方案2】:

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/*”对我不起作用

【讨论】:

  • 如果你使用 setClass org.videolan.vlc.betav7neon.gui.video.VideoPlayerActivity 那么你可以删除 mime 信息。
【解决方案3】:

以前的答案对我不起作用。经过一番搜索,我找到了the official docs here

基本上就是这样:

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);

您可以为您移除不必要的部分。

【讨论】:

  • 这是唯一对我有用的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-12-17
  • 2012-09-07
  • 1970-01-01
  • 2015-12-31
  • 2013-11-17
  • 2016-04-26
  • 1970-01-01
  • 2016-12-23
相关资源
最近更新 更多