点击我的按钮后,我编写了以下代码来播放视频 我的 SDCARD(mp4)。
video_view = (VideoView)findViewById(R.id.video_view);
video_view.setVideoPath("/sdcard/myvideo.mp4");
video_view.setMediaController(new MediaController(this));
video_view.start();
我可以在播放器中播放SDCARD录制的视频。
答案 0 :(得分:53)
我已尝试过上述所有方法,但它们都无法正常工作。
最后,我试着调用这个函数,然后出现了视频。
video_view.setZOrderOnTop(true);
希望这也适合你。
答案 1 :(得分:10)
解决方案1:
videoView.setZOrderOnTop(true);
这会将视频视图设置为顶层;换句话说:阻止它下面的一切。
解决方案2:
videoView.setBackgroundColor(Color.TRANSPARENT);
解决方案3:
有时这与你的apptheme有关;在我的情况下,我将apptheme从@style/AppTheme
更改为@android:style/Theme.NoTitleBar.Fullscreen
以解决我的问题。
答案 2 :(得分:2)
你可以尝试一下吗?
video_view = (VideoView)findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video_view);
mediaController.setMediaPlayer(video_view); //you probably don't need this
video_view.setVideoPath("/sdcard/myvideo.mp4");
video_view.setMediaController(mediaController);
video_view.start();
答案 3 :(得分:2)
我遇到了同样的问题,我的视频视图调整为预期的视频分辨率,但屏幕上没有任何内容。我尝试使用上面提到的解决方案但没有任何效果。
我尝试设置可见性并且有效,但不确定原因。这可能有助于遇到此帖并面临像我这样的问题的人
videoView = (VideoView) findViewById(R.id.viewLiveStream);
videoView.setVisibility(View.VISIBLE);
这是我的XML,不确定为什么可见性是一个问题。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/activity_bg1"
android:orientation="vertical">
<Button
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:id="@+id/btnStreaming"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_streaming" />
<TextView
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:id="@+id/txtStreamingUrl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:lines="2" />
<VideoView
android:id="@+id/viewLiveStream"
android:layout_width="640dp"
android:layout_height="480dp"/>
<Button
android:id="@+id/btnPlay"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/play"
android:layout_gravity="center_vertical|center_horizontal"/>
</LinearLayout>
~
答案 4 :(得分:1)
试试这个:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
它可能对你有帮助......
答案 5 :(得分:1)
除了我以编程方式添加视频视图外,我遇到了同样的问题。我在检查视图层次结构时注意到,父ViewGroup将其图层类型设置为软件。
由于我处理的代码库是共享的,我没有注意到图层类型正在设置为父ViewGroup的子类中的软件。
因此,请尝试将父视图图层类型设置为“无”或“硬件”
// Remove this if your parent ViewGroup has this set
//setLayerType(View.LAYER_TYPE_SOFTWARE, null);
// Or set this layer type if the above is not present
setLayerType(View.LAYER_TYPE_NONE, null);
答案 6 :(得分:0)
你可以这样做
video_view = (VideoView)findViewById(R.id.video_view);
video_view.setZOrderMediaOverlay(true);
video_view.setVideoPath("/sdcard/myvideo.mp4");
video_view.setMediaController(new MediaController(this));
video_view.start();
video_view.videoView.setZOrderOnTop(true);
在启动videoView后放置setZorderOnTop(true)方法,而不是之前。
答案 7 :(得分:0)
我的解决方案是将VideoView控件置于布局的顶部,无论如何 如果设置了visibility属性。
这适用于使用Android 6.0的S6
答案 8 :(得分:0)
<VideoView android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_centerInParent="true"
android:id="@+id/myVideo"/>
public class Videoplay extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_videoplay);
VideoView vidView = (VideoView)findViewById(R.id.myVideo);
MediaController vidControl = new MediaController(this);
String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
Uri vidUri = Uri.parse(vidAddress);
Toast.makeText(Videoplay.this, "Loading Teaser",Toast.LENGTH_LONG).show();
vidView.setVideoURI(vidUri);
vidView.start();
vidControl.setAnchorView(vidView);
vidView.setMediaController(vidControl);
}
我在这里播放其中一个链接的视频.. 它对我来说很完美。
希望这会有所帮助..
答案 9 :(得分:0)
当我没有释放MediaPlayer对象时,黑屏和音频播放就发生了。当您使用媒体播放器在“活动”中播放视频时,必须在活动被销毁时将其释放。并且当您再次打开它时,将创建一个新的媒体播放器实例,并使用已经释放的资源。
MediaPlayer.release();
答案 10 :(得分:0)
我尝试了以上所有答案,但是在观察一些代码后没有成功,我要求将焦点放在我的视频视图上。 而且它现在可以在所有设备上使用, 希望这对某些开发者有用!
private var mediaController: MediaController? = null
private fun prepareVideo() {
val uri = Uri.fromFile(File(recordedVideoPath))
mediaController = MediaController(this)
mediaController?.setAnchorView(videoView)
videoView.setMediaController(mediaController)
videoView.requestFocus()
videoView.setVideoURI(uri)
videoView.seekTo(2)
videoView.setZOrderOnTop(true)
videoView.setOnPreparedListener {
try {
mediaController?.show(0)
} catch (e: Exception) {
System.out.println("Error in Video")
}
}
videoView.setOnErrorListener { _, _, _ ->
true
}
}
答案 11 :(得分:-7)
我认为你使用了糟糕的mp4格式。使用Android特定的mp4格式!!!