【问题标题】:Android - Play Video does not workAndroid - 播放视频不起作用
【发布时间】:2015-11-25 06:28:25
【问题描述】:

我是使用 Eclipse 进行 android java 编程的新手(我有 .NET 背景),但无法在模拟器中播放视频(也无法满足 android htc 的需求)

我的设置:

  • 面向 Java 开发人员的 Eclipse IDE,版本:Helios Service Release 2
  • 适用于 Eclipse 的 Android SDK 和 ADT 插件

我正在使用的视频是我用我的 htc 愿望录制的 3gp 视频。

我已经尝试了两种方法

  1. 视频查看
  2. 带有 MediaPlayer 的 SurfaceView 这是我从 Reto Meier 的“Professional Android 2 Application Development”一书中取出的。

我的目标是 Android 2.2(无论是在模拟器中,还是在我的 htc 上)

详情

1. VideoView方法

getDuration 始终返回 -1,即使在调用 videoView.start() 之后 isPlaying 也是错误的。 这是我正在使用的代码:

public class MyActivity extends Activity 
{
    private static final String FileName = "VIDEO0015.3gp";
    private static final String MyTag = "MyActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {               
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        VideoView videoView = (VideoView) findViewById(R.id.videoView1);
        videoView.setKeepScreenOn(true);

        File clip=new File(Environment.getExternalStorageDirectory(), FileName);
        if (clip.exists())
        {
            videoView.setVideoPath(clip.getAbsolutePath());
            int duration = videoView.getDuration();

            if (videoView.canSeekForward())
            {
                videoView.seekTo(duration/2);
            }

            videoView.start();
        }
   }
}

main.xml 文件:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<VideoView android:id="@+id/videoView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content">
</VideoView>
</LinearLayout>

2。带有 MediaPlayer 的 SurfaceView 通过这种方法,我得到了正确的持续时间(大约 15 秒)并且 isPlaying 是正确的。 什么都看不到,视频播放也永远不会完成。

如果有人要检查,我会添加代码。


感谢您的帮助,我越来越绝望了。

弗兰克

【问题讨论】:

  • 看起来很奇怪,你能发布你的 main.xml 吗(不要忘记将其格式化为代码 - 只需标记它并按 ctrl+k),你是否尝试播放另一个视频(未录制在电话)?
  • @MByD:感谢您的帮助。我已经添加了 main.xml 文件的内容。我已经玩了一些布局设置,但没有改变。我真的是一个新手,所以也许我做的事情根本上是错误的。关于其他视频,我尝试了另一个,但由于另一个错误而失败。因为第二次尝试(使用 surfaceView 和 mediaPlayer)返回正确的持续时间并说 isPlaying = true 我假设视频没问题。我会检查另一个视频。有没有保证可以正常播放的视频?
  • 我尝试了你的代码,得到了相同的结果(视频有效),我不知道为什么,也许我以后有时间检查一下。

标签: android video


【解决方案1】:

我之前也遇到过类似的问题。您是否尝试“暗示”3gp 视频?你可以看看here。希望它会有所帮助。

【讨论】:

    【解决方案2】:

    嗨,我以前写过一些测试视频查看程序。 我想也许你的视频文件路径错误? 这是我的测试代码,

    public class VideoActivity  extends Activity {
        /** Called when the activity is first created. */
        @Override
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.video_view_layout);
    
            VideoView videoView = (VideoView) findViewById(R.id.VideoView);
            MediaController mediaController = new MediaController(this);
            mediaController.setAnchorView(videoView);
    
            Uri video = Uri.parse("/sdcard/test_video.mp4");
            videoView.setMediaController(mediaController);
            videoView.setVideoURI(video);
            videoView.start();
            }
    }
    

    XML 是,

    <?xml version="1.0" encoding="utf-8"?>
    <VideoView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/VideoView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center">
    </VideoView>
    

    AndroidManifest.xml,

            <activity android:name=".VideoActivity"
                      android:label="@string/app_name"
                      android:screenOrientation="landscape"
                      android:theme="@android:style/Theme.NoTitleBar"
                      android:noHistory="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    希望能帮到你。

    【讨论】:

    • 在这种情况下,视频文件放在/sdcard根目录下。
    • 感谢您的帮助。我尝试了您的代码,但我得到 未找到启动器活动!启动只会同步设备上的应用程序包! 我是新手,所以我不知道问题的原因。我认为我的视频文件的路径是可以的,因为我用File clip=new File(Environment.getExternalStorageDirectory(), FileName); if (clip.exists())在代码中检查了它
    【解决方案3】:

    如果您还没有找到解决方案,如果视频未处于播放状态,VideoView.getDuration() 将返回 -1。视频在准备好之前不会处于播放状态。所以设置URI后直接调用VideoView.getDuration()并不能保证视频已经准备好了。

    我是通过查看 VideoView 的来源发现的:

    @Override
    public int getDuration() {
        if (isInPlaybackState()) {
            return mMediaPlayer.getDuration();
        }
    
        return -1;
    }
    

    解决方案是为您的 VideoView 设置一个 OnPreparedListener,并在准备好视频后获取/使用持续时间。然后,您可以使用几乎相同的VideoView.getDuration()MediaPlayer.getDuration()

    解决方案:

    public class MyActivity extends Activity {
    private static final String FileName = "VIDEO0015.3gp";
    private static final String MyTag = "MyActivity";
    
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        VideoView videoView = (VideoView) findViewById(R.id.videoView1);
        videoView.setKeepScreenOn(true);
    
        File clip = new File(Environment.getExternalStorageDirectory(), FileName);
        if (clip.exists()) {
            videoView.setVideoPath(clip.getAbsolutePath());
            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    int duration = videoView.getDuration();
                    if (videoView.canSeekForward()) {
                        videoView.seekTo(duration / 2);
                        videoView.start();
                    }
                }
            });
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 2021-02-02
      • 1970-01-01
      • 2014-12-02
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多