首页 > android 视频直播 portrait 模式下 輸出影片旋转90

android 视频直播 portrait 模式下 輸出影片旋转90

  1. 描述你的问题

正在開發一個直播app, 流串服務器是wowza
由於android 錄制的影片預設是landscape,在portrait時影片輸出會旋转90度
試了MediaRecorder setOrientationHint沒用
然後用 MediaCodec 在onPreviewFrame用下面的代碼把每一幀進行處理
原本landscape 640 x 480 旋转成功後還是 640 x 480 影像被拉闊,理想的效果是480 X 640
然後下一步打算用NDK的一些模塊將每一幀縮放
但考慮到這樣處理會有效能上的考慮,設置NDK也是一個問題。

所以問有沒有人遇到過這個問題,並找到解決方法。

  1. 贴上相关代码

public static void rotateNV21(byte[] input, byte[] output, int width, int height, int rotation) {

    boolean swap = (rotation == 90 || rotation == 270);
    boolean yflip = (rotation == 90 || rotation == 180);
    boolean xflip = (rotation == 270 || rotation == 180);
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            int xo = x, yo = y;
            int w = width, h = height;
            int xi = xo, yi = yo;
            if (swap) {
                xi = w * yo / h;
                yi = h * xo / w;
            }
            if (yflip) {
                yi = h - yi - 1;
            }
            if (xflip) {
                xi = w - xi - 1;
            }
            output[w * yo + xo] = input[w * yi + xi];
            int fs = w * h;
            int qs = (fs >> 2);
            xi = (xi >> 1);
            yi = (yi >> 1);
            xo = (xo >> 1);
            yo = (yo >> 1);
            w = (w >> 1);
            h = (h >> 1);

// adjust for interleave here

            int ui = fs + (w * yi + xi) * 2;
            int uo = fs + (w * yo + xo) * 2;

// and here

            int vi = ui + 1;
            int vo = uo + 1;
            output[uo] = input[ui];
            output[vo] = input[vi];
        }
    }
}

source: https://github.com/fyhertz/libstreaming/issues/36#issuecomment-444231913. 贴上报错信息

  1. 贴上相关截图

  1. 已经尝试过哪些方法仍然没解决(附上相关链接)
    setOrientationHint方法,不是所有的播放起都支持这个设置

【热门文章】
【热门文章】