Heim > Fragen und Antworten > Hauptteil
描述你的问题
正在開發一個直播app, 流串服務器是wowza
由於android 錄制的影片預設是landscape,在portrait時影片輸出會旋转90度
試了MediaRecorder setOrientationHint沒用
然後用 MediaCodec 在onPreviewFrame用下面的代碼把每一幀進行處理
原本landscape 640 x 480 旋转成功後還是 640 x 480 影像被拉闊,理想的效果是480 X 640
然後下一步打算用NDK的一些模塊將每一幀縮放
但考慮到這樣處理會有效能上的考慮,設置NDK也是一個問題。
所以問有沒有人遇到過這個問題,並找到解決方法。
贴上相关代码
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. 贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
setOrientationHint方法,不是所有的播放起都支持这个设置