blueberryCoder / LiveStream

一个实现直播的解决方案,视频采用H264编码、音频采用ACC编码、传输采用Rtmp协议

Home Page:http://blog.csdn.net/a992036795/article/details/64460049

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

width应该如何设置

OhYee opened this issue · comments

commented
mMediaPublisher = MediaPublisher
                .newInstance(new Config.Builder()
                        .setFps(30) // fps
                        .setMaxWidth(720) //视频的最大宽度
                        .setMinWidth(320) //视频的最小宽度
                        .setUrl("rtmp://192.168.155.1:1935/live/test")//推送的url
                        .build());

这里的MaxWidth和MinWidth应该以什么原则来设置?
(我尝试调了比较大的数值,直接崩溃了)

另外高度是根据宽度自动设置了么?

程序会跟你设置的minWidth,maxWidth 查找设备支持的视频宽高尺寸,进行设置。如果找不到就会抛异常。

所有尽量 minWidth-maxWidth区间设置大一点,比较容易找到尺寸。 高度是根据你设置的区间,查找的尺寸只能够获得的。

相关代码: Camera.Parameters parameters = mCamera.getParameters();
List<Camera.Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();
for (Camera.Size size : supportedPreviewSizes
) {
if (size.width >= config.minWidth && size.width <= config.maxWidth) {
previewSize = size;
Log.i(TAG, String.format("find preview size width=%d,height=%d", previewSize.width,
previewSize.height));
break;
}
}

    int[] destRange = {config.fps * 1000, config.fps * 1000};
    List<int[]> supportedPreviewFpsRange = parameters.getSupportedPreviewFpsRange();
    for (int[] range : supportedPreviewFpsRange
            ) {
        if (range[PREVIEW_FPS_MAX_INDEX] >= config.fps * 1000) {
            destRange = range;
            Log.d(TAG, String.format("find fps range :%s", Arrays.toString(destRange)));
            break;
        }
    }

    if (previewSize == null) {
        throw new RuntimeException("find previewSize error");
    }
commented

@blueberryCoder 我看到这一块的实现了
我打印出了我的设备所有支持的格式:
1920x1080,1440x1080,1280x720,1088x1088,1056x864,960x720,880x720,800x480,720x480,640x480,528x432,352x288,320x240,176x144

可以看出1080以上的有1920x1080,1440x1080,1088x1088
然后最大值设置成1088,最小设置成1080可以正常使用
但是我把最大值和最小值同时设置成1080,就会出错

跟据log发现if内的代码没有执行,而根据if的条件,应该是可以执行的,不知道问题在哪

if (size.width >= config.minWidth && size.width <= config.maxWidth) {
    previewSize = size;
    Log.d(TAG, String.format("find preview size width=%d,height=%d", previewSize.width,
    previewSize.height));
    break;
}

不知道我这里出了什么问题

报错信息如下:

com.oyohyee.record E/AndroidRuntime: FATAL EXCEPTION: main
                                     Process: com.oyohyee.record, PID: 13502
                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.oyohyee.record/com.oyohyee.record.MainActivity}: java.lang.RuntimeException: find previewSize error
                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
                                         at android.app.ActivityThread.access$1100(ActivityThread.java:229)
                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                         at android.os.Looper.loop(Looper.java:148)
                                         at android.app.ActivityThread.main(ActivityThread.java:7325)
                                         at java.lang.reflect.Method.invoke(Native Method)
                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                         at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
                                      Caused by: java.lang.RuntimeException: find previewSize error
                                         at com.blueberry.media.VideoGatherer.setCameraParameters(VideoGatherer.java:244)
                                         at com.blueberry.media.VideoGatherer.initCamera(VideoGatherer.java:90)
                                         at com.blueberry.media.MediaPublisher.initVideoGatherer(MediaPublisher.java:101)
                                         at com.oyohyee.record.MainActivity.doNext(MainActivity.java:72)
                                         at com.oyohyee.record.MainActivity.checkPermissions(MainActivity.java:197)
                                         at com.oyohyee.record.MainActivity.onCreate(MainActivity.java:55)
                                         at android.app.Activity.performCreate(Activity.java:6904)
                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415) 
                                         at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                         at android.os.Looper.loop(Looper.java:148) 
                                         at android.app.ActivityThread.main(ActivityThread.java:7325) 
                                         at java.lang.reflect.Method.invoke(Native Method) 
                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                         at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102) 


commented

我蠢了,把高度和宽度搞反了……
原来大的是宽度