2012-03-24 9 views
0

は、私が使用しています:エンコードビデオのみFLV

  1. libx264 + ffmpegの
  2. 30 FPS(固定)
  3. を再生はVLC 2.0.1を使用して行われますそして

、フレームレートは毎秒約1つのフレーム思わFLVを再生し、次の方法であるflowplayer私はCFGのffmpeg:

AVOutputFormat* fmtOutput = av_oformat_next(0); 
while((0 != fmtOutput) && (0 != strcmp(fmtOutput->name, "flv"))) 
    fmtOutput = av_oformat_next(fmtOutput); 
m_pFmtCtxOutput   = avformat_alloc_context(); 
m_pFmtCtxOutput->oformat = fmtOutput; 

AVStream* pOutVideoStream= av_new_stream(m_pFmtCtxOutput, pInVideoStream->id); 
AVCodec* videoEncoder = avcodec_find_encoder(CODEC_ID_H264); 

pOutVideoStream->codec->width = 640; 
pOutVideoStream->codec->height = 480; 
pOutVideoStream->codec->level = 30; 
pOutVideoStream->codec->pix_fmt = PIX_FMT_YUV420P; 
pOutVideoStream->codec->bit_rate = 3000000; 

pOutVideoStream->cur_dts   = 0; 
pOutVideoStream->first_dts  = 0; 
pOutVideoStream->index   = 0; 
pOutVideoStream->avg_frame_rate = (AVRational){ 30, 1 }; 
pOutVideoStream->time_base  = 
pOutVideoStream->codec->time_base= (AVRational){ 1, 30000 }; 
pOutVideoStream->codec->gop_size = 30; 
%% Some specific libx264 settings %% 
m_dVideoStep      = 1000;// packet dts/pts is incremented by this amount each frame 

pOutVideoStream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; 
avcodec_open(pOutVideoStream->codec, videoEncoder); 

結果のファイルは、再生フレームレートを除いて、のように見えます。その心に有する

  1. pOutVideoStream-> avg_frame_rate =(AVRational){30、1}。
  2. pOutVideoStream-> time_base =(AVRational){1,30000};
  3. pOutVideoStream-> codec-> time_base =(AVRational){1,30000}; 1000年

によって私はDTS/PTSをインクリメントし、各フレームに対して

  • 私はここで間違って何をしているのですか?ファイルが不安定になる(〜1 fps)のはなぜですか?

    ご協力いただければ幸いです。

    NadavデバッガとのFLVミュクサーのコードをステップSophin

  • 答えて

    0

    で、Iは、ミリ秒を超えない、他の解像度のPTSをサポートするためのffmpegの実装を発見したことがある、を有するtime_base =(AVRational){1、 1000}。

    また、FLVマルチプレクサがフレームレートを適切に解決するためには 'AVStream :: r_frame_rate'を設定する必要があります。

    +0

    1/1000は、flv形式の制限です。 – szatmary

    関連する問題