Android录制视频报错setVideoSize called in a invalid state 1

来源:互联网 发布:雷洋案 网络意见领袖 编辑:程序博客网 时间:2024/05/22 06:39

录制视频时想获取手机支持的录制视频的分辨率,使用代码如下:

List<Camera.Size> videoSize = camera.getParameters().getSupportedVideoSizes();Iterator<Camera.Size> itos = videoSize.iterator();        while (itos.hasNext()) {            Camera.Size curSize = itos.next();            int curSupporSize = curSize.width * curSize.height;            int fixPictrueSize = setFixPictureWidth * setFixPictureHeight;            if (curSupporSize > fixPictrueSize) {                setFixPictureWidth = curSize.width;                setFixPictureHeight = curSize.height;            }        }mediaRecorder.setVideoSize(setFixPictureWidth,        setFixPictureHeight);

出现了两次错误,一次是录制视频时调用camera.getParameters()时报parameters is empty,这是由于在camera.unlock()之后调用了该函数,将其在unlock之前获取就ok了。
还有一个错误就是setVideoSize called in a invalid state 1,进入setVideoSize函数中可以发现抛出异常的条件说明

 /**     * Sets the width and height of the video to be captured.  Must be called     * after setVideoSource(). Call this after setOutFormat() but before     * prepare().     *     * @param width the width of the video to be captured     * @param height the height of the video to be captured     * @throws IllegalStateException if it is called after     * prepare() or before setOutputFormat()     */    public native void setVideoSize(int width, int height)            throws IllegalStateException;

IllegalStateException if it is called after prepare() or before setOutputFormat()表示如果setVideoSize在prepare() 之后或者setOutputFormat()之前调用的话就会出现该异常,即是说要求setVideoSize函数在prepare()之前以及setOutputFormat()之后调用。
查了下代码,发现我调用setVideoSize竟然是在setOutputFormat()之前,改到setOutputFormat()之后就ok了。

0 0