播放视频全屏

18

我正在尝试在我的应用程序中播放视频。它必须是嵌入式的。

我查看了“在Android上播放视频文件”线程。

我能够按照这个讨论中提到的方法使用VideoView播放我的视频。但是存在一些问题。

  1. 我需要全屏视频,如何将VideoView拉伸至全屏?这样会不会使视频也被拉伸?

  2. 我根本不需要默认的播放/快进/停止按钮。基本上我需要连续循环播放视频。

我尝试过像这里介绍的MediaPlayer类,但从未成功过。如果我的视频文件位于res/raw目录中,则字符串格式应该是什么样的?我真的不想从sdcard播放视频文件。它可以随应用程序捆绑吗?

如果这两种方法中的任何一种起作用,那么我就会更好了。

这是我的代码:

videoHolder = new VideoView(this); 
// videoHolder = (VideoView)findViewById(R.id.videoview); 
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
videoHolder.setLayoutParams(params); 
videoHolder.setMediaController(new MediaController(this)); 
setContentView(videoHolder); 
// 
// 
//// I tested and found that it works fine for .wmv, .3gp and .mp4 
//// videoHolder.setVideoURI(Uri.parse("file:///sdcard/video.3gp")); 
videoHolder.setVideoURI(Uri.parse("res/raw/demo.3gp")); 
videoHolder.requestFocus(); 
videoHolder.start(); 

奇怪的是,被注释掉的 url 可以运行(带有 sdcard)。 另一个则不行。我已经尝试了许多组合,从 "file://res/raw/demo.3gp" 到只有 "demo"。

正确的访问该文件的字符串应该是什么?

5个回答

50

播放视频全屏无需编码。

将以下布局格式应用于包含videoview的xml,它肯定会以全屏模式播放视频。 正如我的一样在运行。

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" >
   <VideoView android:id="@+id/myvideoview"
             android:layout_width="fill_parent"
             android:layout_alignParentRight="true"
             android:layout_alignParentLeft="true"
             android:layout_alignParentTop="true"
             android:layout_alignParentBottom="true"
             android:layout_height="fill_parent">
    </VideoView>
 </RelativeLayout>

另外添加 mediacontroller 也将提供您可使用的控制器。


5
但这会拉伸视频 - 破坏宽高比 - Hruskozrout
你是正确的。但这将表明你的设计有误,你拥有的视频数据不适合全屏宽度。 - Rohit Sharma
正是医生所开的药方 ;) 继续保持 - Sheraz Ahmad Khilji
它可以全屏显示,但会拉伸照片和视频,不正确。 - Huy Tower

8
我解决了这个问题:
1. 要移除继续/暂停按钮,需要删除媒体控制器。对于循环播放的问题,可以添加 OnCompletionListener,这样当视频到达结尾时会重新开始播放:
videoView.setOnCompletionListener(
        new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            videoView.start();
        }
        });

2. 要调整视频大小,可以像这样重写VideoView中的onMeasure()方法:

public class MyVideoView extends VideoView {

        public MyVideoView(Context context) {
            super(context);
        }

        @Override
        protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
        {
             setMeasuredDimension(480,800);
        }

    }

6

我知道这个帖子已经几周了,但是你不需要把视频文件复制到SD卡上才能播放它。使用以下代码,替换"com.yourcompany.yourproject"为你自己的包名:

videoView.setVideoURI(Uri.parse("android.resource://com.yourcompay.yourproject/" + R.raw.yourvideoresource));


4
如果您想在全屏模式下播放视频,则只需在Androidmanifest.xml文件中添加以下代码行,该活动将在其中播放视频。只需在android manifest文件中添加这两行即可。
 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
 android:configChanges="orientation|screenSize"

就像在我的androidmanifest.xml文件中添加它一样

  <activity
        android:name="com.appliconic.straminglivevideo.MainActivity"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
        android:configChanges="orientation|screenSize"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

4

稍微修改了@Javanator的答案,这不会拉伸视频:

<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" >
   <VideoView android:id="@+id/myvideoview"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_centerVertical="true"
              android:layout_centerHorizontal="true">
    </VideoView>
 </RelativeLayout>

希望这篇文章能对某些人有所帮助 :)

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