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 中出现一秒钟后消失
在 Android 的 Firebase URL 的 VideoView 中显示视频