2012-11-21 7 views
10

このアプリは、カメラ出力をmovに保存します。ファイルを作成し、AVPacketによってrtmpサーバーに送信されたflv形式に変換します。 2つのファイルの間で毎回切り替わります.1つはカメラ出力で書き込まれ、もう1つは送信されます。 私の問題は、オーディオ/ビデオがしばらくしてから同期を外れているということです。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); 

答えて

0

を信じて: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); 
    } 
関連する問題