2011-06-08 43 views
0

我想使用ffmpeg lib將rtsp流保存到本地mp4文件而無需解碼。 輸入流和輸出文件都使用H264 + AAC編解碼器。 現在我使用下面的代碼從輸入流中讀取數據包並寫入輸出文件。FFmpeg remux without decode/encode

... 
av_write_header(oFmtCtx); 
av_init_packet(&packet); 
int j = 0; 

while (av_read_frame(pIFmtCtx, &packet) >= 0 && j < 140/*temp use to get a period of the stream*/) 
{ 
    //now I only output the audio stream 
    if (packet.stream_index == audioStream) 
    { 
     AVPacket pkt; 
     av_init_packet(&pkt); 
     pkt.size = packet.size; 
     pkt.data = packet.data; 
     pkt.dts = AV_NOPTS_VALUE; 
     pkt.pts = AV_NOPTS_VALUE; 
     pkt.flags |= PKT_FLAG_KEY; 
     pkt.stream_index = oStream->index; 
     if (av_interleaved_write_frame(oFmtCtx, &pkt) != 0) 
     { 
      LOGI("Error while writing audio frame\n"); 
      break; 
     } 
    } 
    j++; 

} 
av_write_trailer(oFmtCtx); 

生成文件。當我用VLC打開它時,播放會持續正確的時間,但沒有音頻輸出。 任何幫助將不勝感激,在此先感謝。

博爾頓

回答

0

最後我做到了。以下是我的代碼:

while (j < 140) 
{ 
    av_read_frame(pIFmtCtx, &packet); 
    pkt_stream_index = packet.stream_index; 
    pkt_pts = packet.pts; 
    pkt_dts = packet.dts; 

    if (packet.stream_index == audioStream) 
    { 
     packet.stream_index = oStream->index; 
     av_write_frame(oFmtCtx, &packet); 

     packet.stream_index = pkt_stream_index; 
     packet.pts = pkt_pts; 
     packet.dts = pkt_dts; 
    } 
    av_free_packet(&packet); 
    j++; 
} 

我不知道原因,但它的工作原理!