的android如何调整视频的宽度和高度,表面观为媒体播放器 [英] android how to resize video width and height in surface view for media player

查看:405
本文介绍了的android如何调整视频的宽度和高度,表面观为媒体播放器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要调整表面观视频

我在玩的媒体播放器的视频使用的视频从表面上看和持有人......

//但在有些设备实施MediaPlayerControl说Micromax的,iball,阿卡什平板电脑则给出不可用抽象的方法,误差跟踪的ACRA缺陷跟踪。

现在我想有上述问题的解决方案:

  • 如何获得媒体播放器控制活跃在wihtout崩溃的所有设备由于抽象方法,在一些媒体控制器 设备。

  • 我如何可以调整视频的表面观。

在code正在F9在三星Galaxy GT P1000 OS 2.2 和一些便宜的设备WorldTeck等。

但在广告ziio 7操作系统的版本是2.2.1(480 * 800) 分辨率密度为160 DPI 视频似乎被放大,并从边缘得到CUTT关闭

在code如下所示:

  / *媒体播放器控制是这样评价因强制关闭一些设备说* Micromax的,创意ziio,阿卡什等* /

    公共类VideoViewerActivity扩展活动器具
            OnBufferingUpdateListener,OnCompletionListener,在preparedListener,
            OnVideoSizeChangedListener,SurfaceHolder.Callback {
        //实现了错误的一些设备,MediaPlayerControl
        私有静态最后字符串变量=MediaPlayerDemo;
        私人诠释mVideoWidth;
        私人诠释mVideoHeight;
        私人MediaPlayer的mMediaPlayer;
        私人SurfaceView米preVIEW;
        私人SurfaceHolder持有人;
        私人字符串路径=;
        私人捆绑临时演员;
        私有静态最后弦乐MEDIA =媒体;
        私有静态最终诠释LOCAL_AUDIO = 1;
        私有静态最终诠释STREAM_AUDIO = 2;
        私有静态最终诠释RESOURCES_AUDIO = 3;
        私有静态最终诠释LOCAL_VIDEO = 4;
        私有静态最终诠释STREAM_VIDEO = 5;
        私人布尔mIsVideoSizeKnown = FALSE;
        私人布尔mIsVideoReadyToBePlayed = FALSE;
        / *错误在其他设备抽象方法的实现* /
        //私人的MediaController的MediaController;
        私人上下文的背景下;
        私人最终处理程序处理程序=新的处理程序();

        / **
         *
         *第一次创建活动时调用。
         * /
        @覆盖
        公共无效的onCreate(包冰柱){
            super.onCreate(冰柱);
            的setContentView(R.layout.video_layout);
            上下文=这一点;
            。PATH = getIntent()getExtras()的getString(媒介);

            Log.v(arpit,路径+路径);
            米preVIEW =(SurfaceView)findViewById(R.id.surfaceview1);
            持有人= M preview.getHolder();
            holder.addCallback(本);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            演员= getIntent()getExtras()。

        }

        私人无效的playVideo(){
            doCleanUp();
            尝试 {

                //创建一个新的媒体播放器并设置监听器
                文件f =新的文件(路径);
                //的FileInputStream中=新的FileInputStream(F);

                RandomAccessFile的RandomAccessFile的=新RandomAccessFile的(F,R);
                // randomAccessFile.skipBytes(1024);
                的FileDescriptor文件描述符= randomAccessFile.getFD();

                mMediaPlayer =新的MediaPlayer();
                mMediaPlayer.setDataSource(文件描述符,Constant.key1.length
                        + Data.deviceID.length(),f.length());

                mMediaPlayer.setDisplay(保持器);
                mMediaPlayer prepare()。
                mMediaPlayer.setOnBufferingUpdateListener(本);
                mMediaPlayer.setOnCompletionListener(本);
                mMediaPlayer.setOn preparedListener(本);
                mMediaPlayer.setOnVideoSizeChangedListener(本);
                mMediaPlayer.setScreenOnWhilePlaying(真正的);

                //的MediaController =新的MediaController(本);
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            }赶上(例外五){
                Log.e(TAG,错误:+ e.getMessage(),E);
                Toast.makeText(背景下,支持的视频找不到
                        Toast.LENGTH_SHORT).show();
                完();
            }
        }

        公共无效onVideoSizeChanged(MediaPlayer的熔点,诠释的宽度,高度INT){
            Log.v(TAG,onVideoSizeChanged名为);
            如果(宽== 0 ||高度== 0){
                Log.e(TAG,无效的视频的宽度(+宽+)或高度(+高
                        +));
                返回;
            }
            mIsVideoSizeKnown = TRUE;
            mVideoWidth =宽度;
            mVideoHeight =高度;
            如果(mIsVideoReadyToBePlayed&安培;&安培; mIsVideoSizeKnown){
                startVideoPlayback();
            }
        }


        公共无效surfaceDestroyed(SurfaceHolder surfaceholder){
            Log.d(TAG,surfaceDestroyed名为);
        }

        公共无效surfaceCreated(SurfaceHolder持有者){
            Log.d(TAG,surfaceCreated名为);
            的playVideo();

        }

        私人无效doCleanUp(){
            mVideoWidth = 0;
            mVideoHeight = 0;
            mIsVideoReadyToBePlayed = FALSE;
            mIsVideoSizeKnown = FALSE;
        }

        私人无效startVideoPlayback(){
            Log.v(TAG,startVideoPlayback);
//还试图和用下面的线,但没有什么好


// holder.setFixedSize(480,800);

holder.setFixedSize(mVideoWidth,mVideoHeight);

mMediaPlayer.start();

        }


    }
 

解决方案

arpit我也工作在相同的设备,你所提到的用于播放视频文件  我对得到了同样的问题,同时将控制视频播放器(抽象方法不可用)。

按我的R&安培; D对这个话题我来的结论,即定制的Andr​​oid操作系统和这些设备的硬件并不适合对方,因为他们是质量很差相比,三星的设备兼容, 这么多的方法,虽然他们是在Android操作系统,但不支持这样的设备。

所以,我认为是没有解决这样的问题,在这些设备上。

PLZ尝试使用标准的设备,同时开发任何项目集中。这可能会帮助你很多。

感谢。 :)

Want to resize the video in surface view

I am Playing a video in Media Player with using a Surface view and holder for video...

// but on implementing MediaPlayerControl on some devices say Micromax, iball, Akash tablet it gives error of abstract method not available as tracked by ACRA bug tracking.

Now I want to have solution of mentioned problems:

  • How to get media player controls active in all devices wihtout crashing due to abstract method as for media controller in some devices.

  • How can I resize the surface view of video.

The code is working f9 on samsung galaxy gt p1000 OS 2.2 and some cheaper device WorldTeck etc.

But on Creative ziio 7 OS version is 2.2.1 (480*800) resolution density is 160 dpi video seems to be zoomed and gets cutt off from the edges.

The code is shown below:

/* Media Player Control is commented due to force close in some devices say *micromax,Creative ziio, akash etc */

    public class VideoViewerActivity extends Activity implements
            OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
            OnVideoSizeChangedListener, SurfaceHolder.Callback {
        // implements  ERROR in some devices , MediaPlayerControl
        private static final String TAG = "MediaPlayerDemo";
        private int mVideoWidth;
        private int mVideoHeight;
        private MediaPlayer mMediaPlayer;
        private SurfaceView mPreview;
        private SurfaceHolder holder;
        private String path = "";
        private Bundle extras;
        private static final String MEDIA = "media";
        private static final int LOCAL_AUDIO = 1;
        private static final int STREAM_AUDIO = 2;
        private static final int RESOURCES_AUDIO = 3;
        private static final int LOCAL_VIDEO = 4;
        private static final int STREAM_VIDEO = 5;
        private boolean mIsVideoSizeKnown = false;
        private boolean mIsVideoReadyToBePlayed = false;
        /* ERROR In Abstract method implementation in the other devices */
        // private MediaController mediaController;
        private Context context;
        private final Handler handler = new Handler();

        /**
         * 
         * Called when the activity is first created.
         */
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.video_layout);
            context = this;
            path = getIntent().getExtras().getString("media");

            Log.v("arpit", "path " + path);
            mPreview = (SurfaceView) findViewById(R.id.surfaceview1);
            holder = mPreview.getHolder();
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            extras = getIntent().getExtras();

        }

        private void playVideo() {
            doCleanUp();
            try {

                // Create a new media player and set the listeners
                File f = new File(path);
                // FileInputStream in = new FileInputStream(f);

                RandomAccessFile randomAccessFile = new RandomAccessFile(f, "r");
                // randomAccessFile.skipBytes(1024);
                FileDescriptor fileDescriptor = randomAccessFile.getFD();

                mMediaPlayer = new MediaPlayer();
                mMediaPlayer.setDataSource(fileDescriptor, Constant.key1.length
                        + Data.deviceID.length(), f.length());

                mMediaPlayer.setDisplay(holder);
                mMediaPlayer.prepare();
                mMediaPlayer.setOnBufferingUpdateListener(this);
                mMediaPlayer.setOnCompletionListener(this);
                mMediaPlayer.setOnPreparedListener(this);
                mMediaPlayer.setOnVideoSizeChangedListener(this);
                mMediaPlayer.setScreenOnWhilePlaying(true);

                // mediaController = new MediaController(this);
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            } catch (Exception e) {
                Log.e(TAG, "error: " + e.getMessage(), e);
                Toast.makeText(context, "supported video was not found",
                        Toast.LENGTH_SHORT).show();
                finish();
            }
        }

        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
            Log.v(TAG, "onVideoSizeChanged called");
            if (width == 0 || height == 0) {
                Log.e(TAG, "invalid video width(" + width + ") or height(" + height
                        + ")");
                return;
            }
            mIsVideoSizeKnown = true;
            mVideoWidth = width;
            mVideoHeight = height;
            if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
                startVideoPlayback();
            }
        }


        public void surfaceDestroyed(SurfaceHolder surfaceholder) {
            Log.d(TAG, "surfaceDestroyed called");
        }

        public void surfaceCreated(SurfaceHolder holder) {
            Log.d(TAG, "surfaceCreated called");
            playVideo();

        }

        private void doCleanUp() {
            mVideoWidth = 0;
            mVideoHeight = 0;
            mIsVideoReadyToBePlayed = false;
            mIsVideoSizeKnown = false;
        }

        private void startVideoPlayback() {
            Log.v(TAG, "startVideoPlayback");
//also tried and used the below line but nothing good 


// holder.setFixedSize(480, 800);

holder.setFixedSize(mVideoWidth, mVideoHeight);

mMediaPlayer.start();

        }


    }

解决方案

Hi arpit i was also working on the same devices as you have mentioned for playing video files, I to got the same problem while applying controls to video player (Abstract method not available).

As per my R&D on this topic i come to conclusion that the Customized android OS and the hardware of these devices are not compatible for each other as they are of very poor quality as compared to Samsung devices, so many of methods though they are in android OS but not supported by such devices.

So i think there is no solutions for such problems, in these devices.

plz try to focus using standard devices while developing any project. this may help you a lot.

Thanks. :)

这篇关于的android如何调整视频的宽度和高度,表面观为媒体播放器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆