Skip to content

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;           
           }
        ......
    }
}
Clone this wiki locally