2
我的應用程序會覆蓋onPreviewFrame回調以將當前相機幀傳遞給webrtc本機函數。這工作完美,但我希望能夠切換到發送靜態幀,而不是視頻,如果該選項已被選中我的應用程序。如何用靜態YUV幀覆蓋預覽幀數據?
到目前爲止,我創建了一個YUV NV21鏡像,我將其存儲在資產目錄中。所有嘗試將該幀傳遞給本機函數都會導致紫色/綠色條紋而不是實際圖像。
這是我到目前爲止;
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
previewBufferLock.lock();
if (mFrameProvider.isEnabled()) {
mFrameProvider.overwriteWithFrame(data, expectedFrameSize);
}
if (isCaptureRunning) {
if (data.length == expectedFrameSize) {
ProvideCameraFrame(data, expectedFrameSize, context);
cameraUtils.addCallbackBuffer(camera, data);
}
}
previewBufferLock.unlock();
}
@Override
public byte[] overwriteWithPreviewFrame(byte[] data, int expectedFrameSize) {
if (mFrameData == null) {
loadPreviewFrame();
}
for (int i=0; i < expectedFrameSize; i++) {
if (i < mFrameData.length) {
data[i] = mFrameData[i];
}
}
return data;
}
而且
private void loadPreviewFrame() {
try {
InputStream open = mContext.getResources().getAssets().open(PREVIEW_FRAME_FILE);
mFrameData = IOUtils.toByteArray(open);
open.close();
} catch (Exception e) {
Log.e("", "", e);
}
}
我試圖將圖像轉換爲位圖了。所以問題是如何從資產中打開一個YUV幀並將其轉換爲合適的格式傳遞給本地方法。
結果如下輸出;右後
如果您看到* an *圖片,那麼您顯然將取代相機輸出取得一些成功。你確定你的形象是正確的嗎? – fadden
是的,我也嘗試過使用YUV示例框架,可以在網上找到.. :( – Lunar
無論您提供的圖像是否紫色/綠色條紋輸出看起來都一樣嗎?(或者對於相同的圖像,後續運行不同)?試圖找出是否看到圖像的扭曲版本,或從其他地方亂碼數據 – fadden