-
Notifications
You must be signed in to change notification settings - Fork 209
Error_QA
zanxiaofei edited this page Oct 12, 2016
·
1 revision
音画不同步,主要表现在推流后用户听到的声音和看到的画面不同步,发生这种问题的原因可能有很多种,比如服务端或者源站异常,SDK采集、编码、推流异常等。虽然发生这种问题的可能性很小,但是目前并不能完全避免这种情况的发生,因此在发生这种问题的时候,及时采取必要的措施,阻止拉流端持续拿到错误的数据
针对SDK侧造成的音画不同步,如果在采集的时候音频的pts数据和视频的pts数据差距很大,比如差距超过5s,则停止推流,并上报错误信息给服务端,同时通过回调通知App
软编,方案实装版本3.3.2.0及以上 硬编,方案实装版本3.3.3.0及以上
在音频和视频采集时,如果两者的pts的绝对差值超过了5s,则发送KSYVIDEO_AV_SYNC_ERROR(-2004)的错误码给上层的App,同时会发送实际的音视频pts绝对差值(单位为s)。SDK内部会主动停止推流。App可以通过现有的错误回调StreamStatusEventHandler.OnStatusErrorListener来接收改错误信息。App在收到这个错误回调时,可以提示用户,重新开启推流。示例代码如下:
public StreamStatusEventHandler.OnStatusErrorListener mOnStatusErrorListener = new StreamStatusEventHandler.OnStatusErrorListener() {
@Override
public void onError(int what, int arg1, int arg2, String msg) {
......
boolean needRetry = true;
switch (what) {
case RecorderConstants.KSYVIDEO_AV_SYNC_ERROR:
Log.e(TAG, "the streaming stopped because KSYVIDEO_AV_SYNC_ERROR, pts diff:" +
String.valueOf(arg1)+ “s”);
if (mHandler != null) {
//TODO这个message中可以返回App线程提示或重新开始推流
mHandler.obtainMessage(what, msg).sendToTarget();
}
needRetry = false;
break;
}
......
}
}