該應用程序將攝像機輸出保存爲mov。文件,然後將其轉換爲AVPacket發送給rtmp服務器的flv格式。 它每次在兩個文件之間切換,一個由攝像機輸出寫入,另一個發送。 我的問題是,一段時間後音頻/視頻不同步。FFMpeg iOS應用程序中的音頻/視頻不同步
發送的第一個緩衝區總是100%同步,但過了一段時間後就會混亂。 我相信它是一個DTS-PTS的問題..
if(isVideo)
{
packet->stream_index = VIDEO_STREAM;
packet->dts = packet->pts = videoPosition;
videoPosition += packet->duration = FLV_TIMEBASE * packet->duration * videoCodec->ticks_per_frame * videoCodec->time_base.num/videoCodec->time_base.den;
}
else
{
packet->stream_index = AUDIO_STREAM;
packet->dts = packet->pts = audioPosition;
audioPosition += packet->duration = FLV_TIMEBASE * packet->duration/audioRate;
//NSLog(@"audio position = %lld", audioPosition);
}
packet->pos = -1;
packet->convergence_duration = AV_NOPTS_VALUE;
// This sometimes fails without being a critical error, so no exception is raised
if((code = av_interleaved_write_frame(file, packet)))
{
NSLog(@"Streamer::Couldn't write frame");
}
av_free_packet(packet);