【问题标题】:How to run mkv, flv, avi formats video files?如何运行 mkv、flv、avi 格式的视频文件?
【发布时间】:2014-06-12 07:51:50
【问题描述】:

我正在制作一个项目,我可以使用这个使用 videoview 的简单代码播放 3gp amd mp4 格式的视频文件

vv = (VideoView) findViewById(R.id.videoView);
vv.setVideoPath(filename);
vv.setMediaController(new MediaController(this));
vv.requestFocus();
vv.start();

我希望它也能播放 mkv、flv、avi 格式的文件。我确实搜索过这个,我得到了一个关于 votamio 的选项。我也试过了。我下载了 vitamio 的演示项目并在这个演示项目中导入了它的库,即 InitActivity,我尝试在其中播放简单的 mp4 文件,但这也没有播放。 那么谁能建议我必须做什么才能播放所有视频格式?

使用 Vitamio 更新 1:

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;


public class ViewVideo extends Activity {
      private String filename;
      VideoView vv;
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            System.gc();
            if (!LibsChecker.checkVitamioLibs(this))
                return;
            Intent i = getIntent();
            Bundle extras = i.getExtras();
            filename = extras.getString("videofilename");
            // vv = new VideoView(getApplicationContext());
            setContentView(R.layout.activity_view);
            vv = (VideoView) findViewById(R.id.videoView);
            vv.setVideoPath(filename);
            vv.setMediaController(new MediaController(this));
            vv.requestFocus();
            vv.start();
      }
}

我用的时候

if (!LibsChecker.checkVitamioLibs(this))
                    return;

我得到的 Logcat...

06-12 13:35:53.952: E/AndroidRuntime(8078): FATAL EXCEPTION: main
06-12 13:35:53.952: E/AndroidRuntime(8078): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.videoplayer/com.example.videoplayer.ViewVideo}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.videoplayer/io.vov.vitamio.activity.InitActivity}; have you declared this activity in your AndroidManifest.xml?
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread.access$1500(ActivityThread.java:121)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.os.Looper.loop(Looper.java:130)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread.main(ActivityThread.java:3701)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at java.lang.reflect.Method.invokeNative(Native Method)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at java.lang.reflect.Method.invoke(Method.java:507)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at dalvik.system.NativeStart.main(Native Method)
06-12 13:35:53.952: E/AndroidRuntime(8078): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.videoplayer/io.vov.vitamio.activity.InitActivity}; have you declared this activity in your AndroidManifest.xml?
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.Activity.startActivityForResult(Activity.java:2827)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.Activity.startActivity(Activity.java:2933)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at io.vov.vitamio.LibsChecker.checkVitamioLibs(LibsChecker.java:47)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at com.example.videoplayer.ViewVideo.onCreate(ViewVideo.java:19)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-12 13:35:53.952: E/AndroidRuntime(8078):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
06-12 13:35:53.952: E/AndroidRuntime(8078):     ... 11 more

【问题讨论】:

  • 您是否在 AndroidManifest.xml 中声明了此活动?我看到了这个错误。在您的日志中。
  • AndroidManifest.xml 中添加 ViewVideo 活动,其他一切都应该没问题。
  • @AhmedNawaz 如果我不使用这个 if (!LibsChecker.checkVitamioLibs(this)) return;它运行良好
  • 有时很好,有时有问题。这可确保您的应用中存在该库。
  • @AhmedNawaz 我认为该库无法正常工作。正如我所说,如果我不使用 Vitamio 库,甚至不使用 if (!LibsChecker.checkVitamioLibs(this)) return;该项目运行良好并且可以完美播放 mp4 文件,但是如果我使用 lib 和此代码,则会出现错误

标签: android video


【解决方案1】:

您可以使用Vitamio 库来播放这些格式。这里是。 https://github.com/yixia/VitamioBundle

视频播放代码相同。只需导入这些并使用 Vitamio VideoView。

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;

在 onCreateView 中检查库,如下所示。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
        return;
    setContentView(R.layout.layout);

播放视频点赞

mVideoView.setVideoPath(path);
mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
mController = new MediaController(this);
mVideoView.setMediaController(mController);

以下应该是您的视频视图。

<io.vov.vitamio.widget.VideoView
 android:id="@+id/surface_view"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_centerHorizontal="true"
  android:layout_centerVertical="true" />

更新:审核后在您的项目中发现以下错误。

1) 使用io.vov.vitamio.widget.VideoView 而不是我上面提到的VideoView

<io.vov.vitamio.widget.VideoView 
        android:id="@+id/videoView"
           android:layout_width="fill_parent"
             android:layout_alignParentLeft="true"
             android:layout_alignParentTop="true"
             android:layout_alignParentBottom="true"
             android:layout_height="fill_parent"/>

2) 在您的AndroidManifest.xml 中定义InitActivity 以下是代码。

<activity
 android:name="io.vov.vitamio.activity.InitActivity"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
 android:launchMode="singleTop"
 android:theme="@android:style/Theme.NoTitleBar"
 android:windowSoftInputMode="stateAlwaysHidden"/>

3) 缺少Permissions 将它们添加到您的AndroidManifest.xml 例如读/写等

【讨论】:

  • 你是说我必须添加属性的 InitActivity,我使用了 Vitamio lib InitActivity,我使用的代码是,我在上面更新了。请检查@Ahmed Nawaz
  • @DevilAbhi 我发现了你的问题并更新了我的答案。
  • vitamio 不支持最高 22 的 api 版本 :(
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 2013-08-11
  • 2016-06-18
  • 2011-04-11
  • 2014-03-14
  • 2011-06-07
  • 2014-11-04
  • 2015-12-14
相关资源
最近更新 更多