Android 视频直播,怎么将自定义camera采集的音频与视频数据 与声网sdk进行连接

我目前是有一个自定义的camera模块
1.声网sdk的api中有 setVideoSource() 来自定义视频源,通过 IVideoFrameConsumer将对应的视频帧进行传递。
我这里的视帧通过camera的回调获取
@Override
public void onPreviewFrame(byte [] data, Camera camera) {
//可以获取nv21 原始数据 data`
}
但这种方式好像只能获取画面,不能获取到音频。那么在设置自定义视频源之后,这种方式下,说话的声音远程设备也能收到么?? 如果只传视频帧远程设备不能听到声音,那应该怎么处理能使得远程设备也能听到声音?

2.声网sdk中有setExternalVideoSource() 配置外部音频源,setExternalAudioSource()配置外部视频源。如果采用这用方式,我的自定camera模块中,可以通过何种方式来采集音频与视频数据??保证采集的音视频数据不会错位??最后通过pushExternalAudioFrame()与pushExternalVideoFrame()分别推送给声网sdk。

谢谢!

1、setVideoSource是自定义视频源的,这时音频走的还是SDK采集处理的音频;
视频数据传递是:
通过IVideoSource中的onInitiali获取一个IVideoFrameConsumer的consumer对象;然后通过consumer给SDK传送视频数据。
其中,consumer支持接收三种 Buffer 类型的视频帧数据:ByteBuffer、ByteArray 和 Texture。请调用 getBufferType 方法指定 Buffer 类型。
consumer的传输方法:
consumeByteBufferFrame、consumeByteArrayFrame、consumeTextureFrame
调用示例:
mConsumer.consumeByteArrayFrame(data, AgoraVideoFrame.NV21, width, height, rotation, timestamp);

2、setExternalVideoSource() 配置外部视频源,setExternalAudioSource()配置外部音频源。
这两个方法也是自采集的方法,在推送的时候会加上当前时间戳timeStamp的,确保音视频是同时的。

另外,如果使用setExternalAudioSource,需要自己做回音消除操作。

自采集建议使用setVideoSource的方式,相对于push接口,MediaIo配置灵活,支持的视频格式更全。
setVideoSource建议先参考下这个demo的实现:

1 个赞

谢谢您的解答!
我先根据您提供的思路试一试。

保证音视频同步的是timeStamp