Android videoview控件不显示视频,只播放音频

Posted

技术标签:

【中文标题】Android videoview控件不显示视频,只播放音频【英文标题】:Android videoview control is not displaying video, only audio is played 【发布时间】:2012-12-13 16:24:25 【问题描述】:

我正在尝试从 android 中的 url 播放视频,为此我在片段类中使用 videoview 控件,但是在播放时没有视频输出,只有音频输出,视频为 .mp4 格式。我是通过以下方式完成的-

  VideoView vv;
  vv=(VideoView)view.findViewById(R.id.videoView1);
  String src="video path";
  Uri uri=Uri.parse(src);   
  getActivity().getWindow().setFormat(PixelFormat.TRANSLUCENT);     
  MediaController mc=new MediaController(getActivity());
  mc.setMediaPlayer(vv);
  vv.setMediaController(mc);
  vv.setVideoURI(uri);
  vv.requestFocus();
  vv.start();

这是我的 xml 代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="#303040" >

    <RelativeLayout
        android:layout_
        android:layout_ >

        <TextView
            android:id="@+id/headLine"
            android:layout_
            android:layout_
            android:layout_marginLeft="100dp"
            android:layout_marginTop="5dp"
            android:textColor="#AFDEFE"
            android:textSize="14sp"
            android:textStyle="italic"
            android:typeface="serif" />

        <com.facebook.widget.ProfilePictureView
            android:id="@+id/fbPic"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="20dp" >
        </com.facebook.widget.ProfilePictureView>
    </RelativeLayout>

    <com.facebook.widget.LoginButton
            android:id="@+id/loginButton"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp" />

    <Button
        android:id="@+id/settingsButton"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="32dp"
        android:text="Play" />

    <VideoView
        android:id="@+id/videoView1"
        android:layout_
        android:layout_
        android:layout_marginLeft="60dp"
        android:layout_marginTop="10dp"
        android:keepScreenOn="true" />

</LinearLayout>

【问题讨论】:

您是否设置了正确的源路径? 是的,我的源路径是正确的,这就是音频输出存在的原因!! 您是在设备还是模拟器上进行测试?如果是设备,是四核吗? 我正在模拟器上测试它。 同时发布您的布局 xml 代码 【参考方案1】:

只添加一行

vv.setZOrderOnTop(true);

【讨论】:

【参考方案2】:

在这里尝试我的代码,我建议您使用以下代码,其中我正在成功运行我的应用程序

代码如下:

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="#f0f0f0" >

    <Button
        android:id="@+id/btnVideoGallery"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:text="@string/gallery" />

    <Button
        android:id="@+id/btnCancel"
        android:layout_
        android:layout_
        android:layout_below="@+id/btnVideoGallery"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="22dp"
        android:text="@string/cancel" />

    <TextView
        android:id="@+id/lblDisplayImage"
        android:layout_
        android:layout_
        android:layout_below="@+id/btnCancel"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="@string/below_this_text_video_will_be_displayed"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#000000"
        android:textSize="13dp" />

    <VideoView
        android:id="@+id/vvDisplayVideo"
        android:layout_
        android:layout_
        android:layout_below="@+id/lblDisplayImage"
        android:layout_marginTop="15dp" />

</RelativeLayout>

Java 文件:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoActivity extends Activity 

    private Button btnVideoGallery,btnCancel;
    private VideoView vvDisplayVideo;
    /** The Constant PICK_VIDEO. */
    private static final int PICK_VIDEO=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_options);

        btnVideoGallery=(Button)findViewById(R.id.btnVideoGallery);
        vvDisplayVideo=(VideoView)findViewById(R.id.vvDisplayVideo);
        btnCancel=(Button)findViewById(R.id.btnCancel);
        vvDisplayVideo.setVisibility(View.GONE);

        btnVideoGallery.setOnClickListener(new OnClickListener() 

            public void onClick(View v) 

                Intent video=new Intent();
                video.setAction(Intent.ACTION_PICK);
                video.setType("video/*");
                startActivityForResult(video, PICK_VIDEO);

            
        );

        btnCancel.setOnClickListener(new OnClickListener() 

            public void onClick(View v) 

                Intent goStartUp=new Intent(VideoActivity.this, StartUpActivity.class);
                goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(goStartUp);
                finish();
            
        );
    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        // TODO Auto-generated method stub
        if (resultCode==Activity.RESULT_OK && requestCode == PICK_VIDEO) 

            vvDisplayVideo.setVisibility(View.VISIBLE);
            vvDisplayVideo.setVideoURI(data.getData());
            vvDisplayVideo.setFocusable(true);
            MediaController mc=new MediaController(this);
            vvDisplayVideo.setMediaController(mc);
            Log.i("True", "Executed");
        
    

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
        // TODO Auto-generated method stub

        Intent goStartUp=new Intent(VideoActivity.this, StartUpActivity.class);
        goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(goStartUp);
        finish();
        return super.onKeyDown(keyCode, event);
    

您也可以根据自己的用途修改清单文件:

<manifest ...>
    <uses-sdk .../>
    <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.RECORD_VIDEO" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

        <uses-feature
            android:name="android.hardware.camera"
            android:required="false" />

    <application ...>
    </application>

</manifest>

【讨论】:

您好,感谢您的解决方案,但再次没有显示视频,只有音频。 我是在一个片段上做的,希望不会有什么不同? 我也觉得应该没什么区别 嗨@slAcker 它对你有用吗?我问你是因为如果你正在解决你的问题,请接受它,因为其他人也会知道这个链接是一个有用的链接,如果你是仍然没有得到解决方案,请使用 Activity 尝试我的代码。它肯定会对您有所帮助。我真的希望这对您有用。 嗨,hardik,不,这对我不起作用我正在考虑创建一个专门的活动来播放视频,而不是将其添加到已经拥挤的活动中。

以上是关于Android videoview控件不显示视频,只播放音频的主要内容,如果未能解决你的问题,请参考以下文章

媒体控件栏在 VideoView Android 中出现一秒钟后消失

视频播放-VideoVIew,Vitamio

在 android 的视频视图上方或视频视图上显示文本

在 Android 的 Firebase URL 的 VideoView 中显示视频

Android VideoView 在 stopPlayback() 后清除显示

VideoView 不在 android Q 中播放视频,但在较低的 android 版本中工作正常