12-02-2018, 08:56 PM
I have the output of a video encoder and the output of an audio encoder bound to a muxer group and channel. The video is 1080p@30fps compressed to h264. The audio is 16bit, 48K audio compressed with AAC. I have asked the muxer to write MPEG-TS files.
I am manually gathering the video (AW_MPI_ISE_GetData) and the audio (AW_MPI_AI_GetFrame) in my own threads and sending them into the encoders in the normal way (AW_MPI_VENC_SendFrame & AW_MPI_AENC_SendFrame).
The audio in the resulting MPEG-TS files seems to be 'behind' the video by several hundred milliseconds. Voices, for instance, don't sync with the lip movements in the video. How can I fix this?
I noticed that the timestamp on the audio data (AUDIO_FRAME_S mTimeStamp) is set to zero when I retrieve it with AW_MPI_AI_GetFrame. The video PTS (VIDEO_FRAME_S mpts) does seem to be set correctly. My thought was that I needed to sync the video and audio timestamps (by using clock()) so the muxer can sync them up. However, when I set mTimeStamp of the audio frames to something non-zero, I get the follwing error message when I call AW_MPI_AENC_SendFrame:
E1202 19:23:16.867974 1173 AudioEnc_Component.c:971] <AudioEncEmptyThisBuffer> fatal error! RecRender should not call this function!
The error return from AS_MPI_AENC_SendFrame is '-1'.
Am I supposed to set the audio timestamp? If not, how can I get the audio and video to sync up?
I am manually gathering the video (AW_MPI_ISE_GetData) and the audio (AW_MPI_AI_GetFrame) in my own threads and sending them into the encoders in the normal way (AW_MPI_VENC_SendFrame & AW_MPI_AENC_SendFrame).
The audio in the resulting MPEG-TS files seems to be 'behind' the video by several hundred milliseconds. Voices, for instance, don't sync with the lip movements in the video. How can I fix this?
I noticed that the timestamp on the audio data (AUDIO_FRAME_S mTimeStamp) is set to zero when I retrieve it with AW_MPI_AI_GetFrame. The video PTS (VIDEO_FRAME_S mpts) does seem to be set correctly. My thought was that I needed to sync the video and audio timestamps (by using clock()) so the muxer can sync them up. However, when I set mTimeStamp of the audio frames to something non-zero, I get the follwing error message when I call AW_MPI_AENC_SendFrame:
E1202 19:23:16.867974 1173 AudioEnc_Component.c:971] <AudioEncEmptyThisBuffer> fatal error! RecRender should not call this function!
The error return from AS_MPI_AENC_SendFrame is '-1'.
Am I supposed to set the audio timestamp? If not, how can I get the audio and video to sync up?