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

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

外部音视频数据输入功能主要满足一些特殊应用场合下的需求,通常普通用户不会使用到,使用该功能,可以由上层应用程序输入视频数据、音频数据到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目录下。

 

posted @ 2014-08-06 10:14  芨芨ペ草  阅读(232)  评论(0编辑  收藏  举报