首页 > 代码库 > 视频开发之外部音视频输入

视频开发之外部音视频输入

视频开发之外部音视频输入

外部音视频数据输入功能主要满足一些特殊应用场合下的需求,通常普通用户不会使用到,使用该功能,可以由上层应用程序输入视频数据、音频数据到AnyChat,然后AnyChat再对这些数据进行编码、传输,即使用上层应用的数据做为数据源,而不使用AnyChat从本地声卡、摄像头采集的音视频数据。

 

通过外部音视频数据输入功能,可以让AnyChat客户端的音视频数据来源更加广泛,默认情况下,AnyChat都是对本地的声卡、摄像头进行采集,把采集后的音频、视频数据再进行编码、传输,而如果视频数据并不是从标准的音视频硬件设备采集,则默认的采集功能将不能满足要求。

 

如果上层应用希望对音视频数据进行一系列的处理,然后将处理后的数据在远程显示出来,则就必须使用外部音视频数据输入功能。

 

使用外部音视频数据输入功能通常需要征询如下的流程:

 

1、启动外部音频、视频输入模式,SDK初始化成功之后、进入房间之前调用:

1.// 设置外部音频、视频输入模式

2.BOOL bExtVideoInput = 1;

3.BRAC_SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT, (CHAR*)&bExtVideoInput, sizeof(DWORD));

4.BOOL bExtAudioInput = 1;

5.BRAC_SetSDKOption(BRAC_SO_CORESDK_EXTAUDIOINPUT, (CHAR*)&bExtAudioInput, sizeof(DWORD));

2、在进入房间成功之后,设置外部输入的音频、视频数据格式,只需要调用一次即可:

1.// 设置输入视频格式

2.BRAC_SetInputVideoFormat(BRAC_PIX_FMT_RGB24, 320, 240, 25, 0);

3.// 设置输入音频格式

4.BRAC_SetInputAudioFormat(1, 16000, 16, 0);

3、在进入房间,且设置了外部输入数据的格式之后,上层应用准备好音频、视频数据时,将数据输入

1.// 输入视频帧数据,每次为1帧

2.BRAC_InputVideoData(m_lpVideoBuf, dwImageSize, 0);

3.  

4.// 输入音频采样数据,每次为100ms

5.BRAC_InputAudioData(lpSamples, dwSize, 0);

 

 

备注:

a)音频、视频可分开,即只开启外部视频数据输入功能,而音频数据还是采用AnyChat默认从声卡采集,这样也是可以的;

b)设置的视频帧率仅为内核编码参考,传输时的帧率以实际输入的帧率为准,如设置为25fps,而实际每秒只调用了1次BRAC_InputVideoData,则内核编码和网络传输也只会每秒处理1次;

c)如果开启了外部音视频数据输入功能,则进入房间成功之后,不需要打开本地的音频、视频设备。

d)AnyChat采用时间戳进行音视频的同步,上层应用可以指定时间戳,也可以不指定时间戳,AnyChat内核会自动采用当前时间戳,时间戳为毫秒间隔,可以使用视频数据扩展回调函数、音频数据扩展回调函数将音视频数据对应的时间戳回调给上层应用,当由上层应用自己处理音视频同步时非常必要。

e)可参考示例代码,位于SDK包的:src\client\c++\AnyChatInputVideo目录下。