2016-11-18 3 views
0

Я использую QuickBlox Android SDK, версия 3.0. Моему приложению нужно распознать лицо или добавить некоторые фильтры в видеодорожку. Я нашел несколько ответов, используя OnQBVideoChatListener.Как добавить фильтры к видеоролику QuickBlox?

private OnQBVideoChatListener qbVideoChatListener = new OnQBVideoChatListener() { 

     @Override 
     public void onCameraDataReceive(byte[] videoData) { 
     } 

     @Override 
     public void onMicrophoneDataReceive(byte[] audioData) { 
     } 

     @Override 
     public void onOpponentVideoDataReceive(byte[] videoData) { 
     } 

     @Override 
     public void onOpponentAudioDataReceive(byte[] audioData) { 
     } 

}; 

Но я не могу найти его в любом аранжировании QuickBlox Android SDK 3.0.

Мой вопрос:

1) Можно ли получить данные байт YUV или OpenGL текстуры из видео дорожки для Android SDK 3.0?

2) Как записать данные кадровой камеры обратно в видеодорожку?

Любая помощь будет подтверждена!

Edit 1:

vfite прав. SurfaceViewRenderer.renderFrame (кадр I420Frame) является ключом к этому вопросу. Поэтому я расширяю класс из QBRTCSurfaceView.

public class CustomRTCSurfaceView extends QBRTCSurfaceView { 
    private static final String TAG = "CustomRTCSurfaceView"; 

    public CustomRTCSurfaceView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomRTCSurfaceView(Context context) { 
     super(context); 
    } 

    @Override 
    public void renderFrame(VideoRenderer.I420Frame frame) { 
     //append filters or do modification as you wish 
     VideoRenderer.I420Frame newFrame = getNewFrame(); 
     super.renderFrame(newFrame); 
    } 
    } 

Но это только изменить эффект кадра текущей стороны, как применить этот эффект на другой стороне соединения равноправных узлов ЛВС? Есть ли какой-либо механизм пользовательских параметров, который я могу использовать?

ответ

0

Вы можете зарегистрировать QBRTCClientVideoTracksCallbacks на QBRTSession и получить видеоролик собственного и оппонента. Для получения фактических кадров с видеодорожки yuo может регистрировать обратный вызов видео на видеообъекторе с использованием

currentSession.addVideoTrackCallbacksListener(this); 

@Override 
public void onRemoteVideoTrackReceive(QBRTCSession session, final QBRTCVideoTrack videoTrack, final Integer userID) { 
    videoTrack = ..; 
} 

videoTrack.addRenderer(new VideoRenderer(new VideoRenderer.Callbacks() { 
     @Override 
     public void renderFrame(VideoRenderer.I420Frame i420Frame) { 
      //then check if frame contains yuv format or oes 
     if (frame.yuvFrame) { 
       drawYUV(frame.width, frame.height, frame.yuvStrides, frame.yuvPlanes); 
     } else { 
      drawOes(frame.textureId, frame.width, frame.height); 
     } 
     } 
    })); 
+0

Спасибо за ответ! Я редактирую свой вопрос, вы можете сделать комментарий? – yangyu