标签: android-videoview

Android中的MediaPlayer和VideoView有什么区别

我想知道在流媒体视频方面它们之间是否存在差异.

我知道VideoView可以用于流媒体和什么是Mediaplayer?据我所知,MediaPlayer可以做同样的事情VideoView吗?

任何人都可以给我答案吗?

如果我想通过使用RTSP到服务器从服务器流式传输视频,我应该从哪个开始?VideoView还是MediaPlayer

有什么建议吗?

streaming android android-mediaplayer android-videoview

93
推荐指数
2
解决办法
4万
查看次数

使用VideoView的无缝视频循环

我有以下代码将视频作为原始资源,启动视频并循环它,但我需要视频无缝循环,截至现在当它到达剪辑结束并再次启动剪辑时之间的过渡导致闪烁一瞬间,我真的不能为我的应用程序.

public class Example extends Activity {
    VideoView vv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        vv = (VideoView)findViewById(R.id.VideoView01);

        //Video Loop
        vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                vv.start(); //need to make transition seamless.
            }
        });

        Uri uri = Uri.parse("android.resource://com.example/"
                + R.raw.video);

        vv.setVideoURI(uri);
        vv.requestFocus();    
        vv.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

该剪辑只有22秒长,但创建为无缝,因此可以毫无延迟地工作.

android android-videoview

79
推荐指数
4
解决办法
5万
查看次数

Android MediaPlayer错误(1,-2147483648)

我有两个不同的视频,我正在尝试加载到VideoView使用中

videoView.setVideoURI(Uri.parse(url));
Run Code Online (Sandbox Code Playgroud)

这两个视频,即视频1视频2,具有以下规格(使用提取ffmpeg -i); 实际上,它们是同一视频的两种不同编码:

  1. 视频1:

    Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '4fbfd5ece4b0932236fc234d.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: mp42isomavc1
        creation_time   : 2011-12-03 04:43:46
        genre           : Trailer
        artist          : Paramount Pictures
        title           : Captain America: The First Avenger - Theatrical Trailer #2
        encoder         : HandBrake 4344svn 2011111001
        date            : 2011
      Duration: 00:02:30.67, start: 0.000000, bitrate: 6738 …
    Run Code Online (Sandbox Code Playgroud)

android media-player android-videoview

72
推荐指数
3
解决办法
8万
查看次数

Android:为什么我不能将onClickListener赋予VideoView?

我写了这些代码行:

 mVideoView = (VideoView) findViewById(R.id.video_view);
    mVideoView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("LOG_TAG, click");
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的应用程序时,从不调用click事件.

所以我想知道,在VideoView上注册OnClickListener是不可能的?如果是这样,为什么会这样呢?

android android-videoview

59
推荐指数
5
解决办法
3万
查看次数

如何在播放前在视频中设置预览图像

VideoView在我的活动中创建了一个,下面是代码.

VideoView vvVideos = (VideoView) rootView.findViewById(R.id.videoView);
MediaController mediacontroller = new MediaController(ctx);
mediacontroller.setAnchorView(vvVideos);
    Uri video = Uri.parse("android.resource://" + packageName +"/"+R.raw.sample);
    vvVideos.setMediaController(mediacontroller);

    LayoutParams params=vvVideos.getLayoutParams();
    params.height=150;
    vvVideos.setLayoutParams(params);

    vvVideos.setVideoURI(video);
    vvVideos.requestFocus();
    vvVideos.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
            vvVideos.start();
        }
    });
Run Code Online (Sandbox Code Playgroud)

现在,视频在创建活动时开始播放.我想让我的活动如下

  1. 当活动开放时,视频不应该播放.
  2. 它应该显示起始视频图像(目前显示黑色)
  3. 它应该只在用户点击视频时播放.
    请帮我.

android android-videoview

57
推荐指数
5
解决办法
7万
查看次数

Android VideoView黑屏

在运行start()方法之前,我一直在寻找摆脱VideoView上令人讨厌的黑色初始屏幕的方法.

我已尝试在窗口小部件上使用背景图像,但它根本无法正常工作.我还尝试在视频顶部的视频中放置第一帧的图像,并将其隐藏在stars()方法之后.添加onPrepared侦听器以启动视频,然后隐藏图像.这有效,但过渡中有一个可怕的闪烁,我不知道如何摆脱它.


感谢您的回复.添加MediaController根本没有任何效果.问题仍然存在(我仍然看到黑色闪烁),我不想让视频控件可见.我的代码看起来像这样:

    VideoView vSurface= (VideoView) findViewById(R.id.surfaceView1);
    vSurface.setVideoURI(Uri.parse("android.resource://com.mypackage/" + R.raw.video1));
    vSurface.setVisibility(View.VISIBLE);
    vSurface.setOnPreparedListener(this);
    vSurface.setDrawingCacheEnabled(true);
    vSurface.setOnErrorListener(this);
Run Code Online (Sandbox Code Playgroud)

android flicker android-videoview

56
推荐指数
8
解决办法
6万
查看次数

在VideoView中定位视频

所以我扩展了VideoView的onMeasure以扩展视频以适应全屏视图.

这是如何:

public void setVideoAspect(int w,int h){
    wVideo=w;
    hVideo=h;
    onMeasure(w, h);
}
 @Override
 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
 {
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     if(wVideo!=0 && hVideo!=0)
     setMeasuredDimension(wVideo,hVideo);
 }
Run Code Online (Sandbox Code Playgroud)

我使用屏幕的显示指标(宽度,高度)调用setVideoAspect().问题是这种方法会拉伸视频以适应屏幕内部.我希望能够保持纵横比.(我有4:3的视频和3:2的屏幕尺寸.)我使用下面的代码给视图保留比率测量值:

int height =  (int) (metrics.widthPixels*3/(float)4);
                        int width=  metrics.widthPixels;   
                        mVideoView.setVideoAspect(width,height);
Run Code Online (Sandbox Code Playgroud)

所以这可以完成这项工作,但是有一个问题:它给了我一个4:3的视频,屏幕的宽度和正确的比例,但它不会使视频居中.(它只是播放视频的底部而不是顶部和底部.)我有一个包含VideoView的相对布局,VideoView的重力设置为居中.

layout android android-videoview

52
推荐指数
4
解决办法
4万
查看次数

使用缓冲视频更改Android VideoView方向

我正在尝试复制Android市场中最新YouTube应用的功能.观看视频时,有两个独立的布局,一个是纵向提供额外的信息,一个是横向,提供视频的全屏视图.

YouTube应用程序纵向布局
YouTupe应用程序处于纵向模式

YouTube应用横向布局
横向模式的YouTube应用

(抱歉照片的随机性,但它们是我能找到的第一个实际布局照片)

这通常很容易做到 - 只需在layout-land中指定一个替代布局,一切都会很好.YouTube应用程序的功能非常好(以及我想要复制的内容)是在方向更改时,视频会继续播放,而不必从头开始重新缓冲.

我已经发现,覆盖onConfigurationChange()并设置新的LayoutParameters将允许我在不强制拒绝的情况下调整视频大小 - 但是当多次旋转屏幕时,视频会随机缩放到不同的宽度/高度.我已尝试在VideoView上进行各种invalidate()调用,尝试在父RelativeLayout容器上调用RequestLayout()并尝试尽可能多的不同内容,但我似乎无法让它正常工作.任何建议将不胜感激!

这是我的代码:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        questionText.setVisibility(View.GONE);
        respond.setVisibility(View.GONE);
        questionVideo.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    } else {
        questionText.setVisibility(View.VISIBLE);
        respond.setVisibility(View.VISIBLE);
        Resources r = getResources();
        int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150.0f, r.getDisplayMetrics());
        questionVideo.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, height));
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我在logcat中发现了一些有趣的输出,当我的视频旋转时出现这似乎是罪魁祸首 - 虽然我不知道如何解决它:

正确调整大小时的Logcat输出(占用整个窗口)

注意h = 726

12-13 15:37:35.468  1262  1270 I ActivityManager: Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=210}
12-13 15:37:35.561  1262  1268 I …
Run Code Online (Sandbox Code Playgroud)

android android-orientation android-videoview

50
推荐指数
5
解决办法
6万
查看次数

使用VideoView进行流式传输或渐进式下载视频

我对VideoView如何用于播放视频感到困惑:从本地文件,渐进式下载和流式传输.

这个例子适用于我(至少1.5和2.0),下载文件并在本地播放.

但是在播放之前是否有必要下载视频:是否可以通过使用setVideoPath或setVideoURI来播放视频作为渐进式下载或流式传输,如API示例中的VideoViewDemo?

VideoViewDemo代码建议使用setVideoURI进行流式传输,但我不清楚我应该使用哪种URL.有人拥有可以使用VideoViewDemo代码流式传输到Android模拟器的视频的示例网址吗?

可以使用渐进式下载与VideoViewDemo一起使用吗?我得到一个'抱歉,这个视频无法播放'消息使用setVideoPath,网址与上面链接的博客示例一起使用.(这是模拟器中的问题吗?我试过1.5和2.0.)

我在网上找到了很多例子和文档,但到目前为止,还没有真正回答这个问题.

android android-videoview

41
推荐指数
1
解决办法
6万
查看次数

如何从网址播放视频

我是android开发的初学者,尝试从链接播放视频.但它给出了错误"sorry,we can't play this video".我尝试了很多链接但是对于所有链接它显示相同的错误.

我的代码如下

public class VideoDemo extends Activity {

        private static final String path ="http://demo.digi-corp.com/S2LWebservice/Resources/SampleVideo.mp4";
 private VideoView video;
 private MediaController ctlr;
 @Override
 public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            getWindow().setFormat(PixelFormat.TRANSLUCENT);
            setContentView(R.layout.videoview);

            video = (VideoView) findViewById(R.id.video);
            video.setVideoPath(path);

            ctlr = new MediaController(this);
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
     }
}
Run Code Online (Sandbox Code Playgroud)

Logcat显示以下错误消息:

04-12 15:04:54.245: ERROR/PlayerDriver(554): HandleErrorEvent: PVMFErrTimeout
Run Code Online (Sandbox Code Playgroud)

android video-streaming android-videoview

40
推荐指数
4
解决办法
14万
查看次数