2016-11-18 78 views
0

我正在使用QuickBlox Android SDK 3.0版。我的应用需要做脸部检测或附加一些过滤器到视频轨道。我找到了一些使用OnQBVideoChatListener的答案。如何将过滤器添加到QuickBlox的videoTrack中?

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)如何将相机画面数据写回视频轨?

任何帮助将appriciated!

编辑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

您可以在QBRTSession上注册QBRTCClientVideoTracksCallbacks并接收自己和对手的视频轨道。从视频轨道获取实际帧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