Видео не отображается на VideoView, но я слышу его звук
-
на мои кнопки я написал следующий код для воспроизведения видео с мой 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 в плеере.
- но когда я запускаю его в своем приложении в videoview, я слышу только звук.
- : Я не могу посмотреть видео.
- - - - - я попытался перейти по ссылке, но все равно не повезло ----
10 ответов
Я пробовал каждый метод выше, но ни один из них не мог работать.
наконец, я попытался вызвать эту функцию, то видео появилось.
video_view.setZOrderOnTop(true);
надеюсь, что это также работает для вас.
Решение 1:
videoView.setZOrderOnTop(true);
это установит videoview на верхний слой; другими словами: заблокируйте все под ним.
решение 2:
videoView.setBackgroundColor(Color.TRANSPARENT);
решение 3:
иногда это связано с вашим apptheme; в моем случае я изменил apptheme из @style/AppTheme
to @android:style/Theme.NoTitleBar.Fullscreen
исправить мою проблему.
я столкнулся с той же проблемой, мой вид видео изменен до ожидаемого разрешения видео, но на экране ничего нет. Я попытался использовать вышеупомянутые решения, но ничего не получилось.
Я попытался установить видимость, и это сработало, не знаю почему. Это может помочь кому-то, кто сталкивается с этим сообщением и сталкивается с такой проблемой, как я
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>
~
попробуйте это :
<?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>
это может помочь вам...
можете ли вы попробовать?
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();
У меня была такая же проблема, за исключением того, что я добавлял свое видео программно. Я заметил, проверяя иерархию представлений, что родительская ViewGroup имеет тип слоя, установленный на программное обеспечение.
поскольку кодовая база, над которой я работаю, является общей, и я не заметил, что тип слоя настраивается на программное обеспечение в подклассе родительской ViewGroup.
поэтому попробуйте установить тип слоя родительских представлений в None или Hardware
// 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);
вы можете сделать это
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);
поместите метод setZorderOnTop (true) после запуска videoView, не раньше.
мое решение заключалось в размещении элемента управления VideoView в верхней части макета и независимо от того если задать свойство visibility.
эта работа для меня на S6 с Android 6.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);
}
здесь я играю видео из одной из ссылок.. Это прекрасно работает для меня.
надеюсь, что это помогает..