仅使用pts同步视频流

时间:2014-02-26 08:07:35

标签: ffmpeg video-streaming

我正在使用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(伪代码更好)并实现发送方和接收方之间的同步(这样如果在缓冲区中累积了更多的数据包,我应该放弃一些数据包,以便发送者和接收者之间的延迟不会随着时间的推移而增长)?

提前致谢。

0 个答案:

没有答案