【问题标题】:Android Videoview is not displaying video at all only sound is heardAndroid Videoview根本不显示视频,只听到声音
【发布时间】:2015-01-29 17:34:00
【问题描述】:

Videoview不显示视频但正在播放声音,每次都显示黑屏。我正在运行 Android 4.0。我正在模拟器上运行它。

这是我的 xml 文件。

<VideoView
android:id="@+id/myVideo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="visible"/>

.java 文件

VideoView vidView = (VideoView)findViewById(R.id.myVideo);
String vidAddress ="rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov";

Uri vidUri = Uri.parse(vidAddress);
vidView.setVideoURI(vidUri);
MediaController vidControl = new MediaController(this);
vidControl.setAnchorView(vidView); 
vidView.setMediaController(vidControl);
vidView.setZOrderOnTop(false); 

vidView.start();

请帮助我从一周开始就坚持下去。搜索了很多,但没有任何效果。

【问题讨论】:

    标签: android android-emulator android-videoview


    【解决方案1】:

    我知道这可能有点旧,但我发布此更新以防万一有人遇到与我相同的问题。这也是对上述问题的改进答案。

    无论如何,你要做的就是把: vidView.setZOrderOnTop(true);声明 AFTER vidView.start(); 声明。即使视频在后台播放,我在显示白色/灰色屏幕(您在 cmets 上提到的)时也遇到了同样的问题。我认为这是因为您的 setZOrderOnTop 是在您开始播放视频之前设置的。如果您先开始播放视频,然后设置 setZOrderOnTop 将为您修复它,就像它为我所做的那样。希望对您有所帮助。

    vidView.start();
    vidView.setZOrderOnTop(true);
    

    【讨论】:

    • vidView.setZOrderOnTop(true) 本身对我不起作用。在 vidView.start() 之后移动这一行是关键。谢谢!
    【解决方案2】:

    解决方案 1:

    videoView.setZOrderOnTop(true);
    

    这会将视频视图设置为顶层;换句话说:阻止它下面的所有东西。

    解决方案 2:

    videoView.setBackgroundColor(Color.TRANSPARENT);
    

    解决方案 3:

    有时这与您的应用主题有关; 就我而言,我将 apptheme 从“@style/AppTheme”更改为“@android:style/Theme.NoTitleBar.Fullscreen”解决了我的问题。

    【讨论】:

      【解决方案3】:

      将 vidView.setZOrderOnTop(false) 更改为 true,因此它将是 vidView.setZOrderOnTop(true);

      参考:Video is not showing on VideoView but i can hear its sound `

      【讨论】:

      • 当我将其更改为 true 即 vidView.setZOrderOnTop(true);然后整个屏幕变成灰色......我在模拟器上运行它。
      • 我自己排序了。模拟器不显示视频,但视频在真机上运行良好。
      • @MominaNisar - 谢谢你。长期以来一直在与我的模拟器斗争:)
      【解决方案4】:

      我遇到了完全相同的问题并通过以下方式解决了它:

      videoView.setBackgroundColor(Color.TRANSPARENT)
      

      【讨论】:

        【解决方案5】:

        通过扩展 VideoView 类创建自定义 VideoPlayer 并使用它:

        public class VideoPlayer extends VideoView {
        
        public VideoPlayer(Context context) {
            super(context);
            init();
        }
        
        @Override
            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                TyrooLog.i(TAG, "onMeasure");
                int width = getDefaultSize(videoWidth, widthMeasureSpec);
                int height = getDefaultSize(videoHeight, heightMeasureSpec);
                if (videoWidth > 0 && videoHeight > 0) {
                    if (videoWidth * height > width * videoHeight) {
                        TyrooLog.i(TAG, "video too tall, correcting");
                        height = width * videoHeight / videoWidth;
                    } else if (videoWidth * height < width * videoHeight) {
                        TyrooLog.i(TAG, "video too wide, correcting");
                        width = height * videoWidth / videoHeight;
                    } else {
                        TyrooLog.i(TAG, "aspect ratio is correct: " + width+"/"+height+"="+mVideoWidth+"/"+mVideoHeight);
                    }
                }
                TyrooLog.i(TAG, "setting size: " + width + 'x' + height);
                setMeasuredDimension(width, height);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 2011-01-12
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多