[Libav-user] [HELP]mpeg-ts video and audio out of sync, convert from flv with avformat
陈 钢
chengang5 at staff.sina.com.cn
Thu Nov 15 11:49:04 CET 2012
Because i need play my videos on iPad, I wrote a nginx module which convert flv fragment to mpeg-ts fragment.
But there is a problem, as the video plays the video and audio more and more out of sync.
After 30min, it is out of sync very significant.
I have been working for that several days on this issue.
I need help.
Below is part of my code:
if(packet.stream_index==video_index){
if (packet.pts != (u_int)AV_NOPTS_VALUE)
{
packet.pts = av_rescale_q(packet.pts,AV_TIME_BASE_NEW_Q,video_stream->time_base);
}
if (packet.dts != (u_int)AV_NOPTS_VALUE)
{
packet.dts = av_rescale_q(packet.dts,AV_TIME_BASE_NEW_Q,video_stream->time_base);
}
if(video_bitstream_filters!=NULL)
{
ret = write_frame(oc,&packet,video_stream->codec,video_bitstream_filters);
if (ret < 0)
{
fprintf(stderr, "Error:write_frame[video] error: %d\n", ret);
}
}else{
ret = av_interleaved_write_frame(oc, &packet);
if (ret < 0)
{
fprintf(stderr, "Error:av_interleaved_write_frame[video] error: %d\n", ret);
}
}
}else if(packet.stream_index==audio_index){
if (packet.pts != (u_int)AV_NOPTS_VALUE)
{
packet.pts = av_rescale_q(packet.pts,audio_stream->codec->time_base,audio_stream->time_base);
}
if (packet.dts != (u_int)AV_NOPTS_VALUE)
packet.dts = av_rescale_q(packet.dts,audio_stream->codec->time_base,audio_stream->time_base);
if (packet.duration > 0)
packet.duration = av_rescale_q(packet.duration,audio_stream->codec->time_base,audio_stream->time_base);
ret = av_interleaved_write_frame(oc, &packet);
if (ret < 0)
{
fprintf(stderr, "Error:av_interleaved_write_frame[audio] error: %d\n", ret);
}
}
More information about the Libav-user
mailing list