我正在使用ffmpeg单独播放视频(无音频)和SDL 2.0进行显示。到目前为止,我已经在数据包到达时将其解码并将其呈现给渲染器。但是我希望通过与PTS值同步来显示视频帧,这样接收器就不会与发送器不同步(因为我通过RTSP传输实时视频)。我读过dranger教程,但我无法理解。我的伪代码如下所示:
//Create SDL window
SDL_Window * window = SDL_CreateWindow("SDL",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, 0);
//Create renderer for the window
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
//Allocate frame
frame = avcodec_alloc_frame();
//Read frame
while (av_read_frame(format_context, &avpacket) >= 0) {
if (avpacket.stream_index == videostream) {
//Decode the frame
avcodec_decode_video2(codec_context, frame, &frame_finished,
&avpacket);
if (frame_finished) {
//update the YUV texture with the decoded frame (SDL_UpdateYUVTexture)
//Copy the texture to the renderer (SDL_RendererCopy)
//Present the rederer (SDL_RenderPresent)
}
//Handle SDL event
SDL_PollEvent(&event)
}
可以帮助我在上面的代码中如何以及在哪里使用PTS(伪代码更好)并实现发送方和接收方之间的同步(这样如果在缓冲区中累积了更多的数据包,我应该放弃一些数据包,以便发送者和接收者之间的延迟不会随着时间的推移而增长)?
提前致谢。