gpt4 book ai didi

objective-c - iOS 应用程序中的 FFMpeg 不同步音频/视频

转载 作者:技术小花猫 更新时间:2023-10-29 10:54:15 37 4
gpt4 key购买 nike

该应用程序将相机输出保存到一个 mov 中。文件,然后将其转成flv格式,由AVPacket发送给rtmp服务器。它每次在两个文件之间切换,一个由相机输出写入,另一个被发送。我的问题是音频/视频在一段时间后变得不同步。

发送的第一个缓冲区总是 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);

最佳答案

您可以研究这个样本:http://unick-soft.ru/art/files/ffmpegEncoder-vs2008.zip

但此示例适用于 Windows。

在此示例中,我仅将 pts 用于音频流:

  if (pVideoCodec->coded_frame->pts != AV_NOPTS_VALUE)
{
pkt.pts = av_rescale_q(pVideoCodec->coded_frame->pts,
pVideoCodec->time_base, pVideoStream->time_base);
}

关于objective-c - iOS 应用程序中的 FFMpeg 不同步音频/视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494346/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com