【问题标题】:FFmpeg remux without decode/encode没有解码/编码的FFmpeg remux
【发布时间】:2011-06-08 06:00:42
【问题描述】:

我想使用 ffmpeg lib 将 rtsp 流保存到本地 mp4 文件而不解码。 输入流和输出文件都使用 H264+AAC 编解码器。 现在我使用以下代码从输入流中读取数据包并写入输出文件。

...
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 打开它时,播放持续了正确的时间,但没有输出音频。 任何帮助将不胜感激,在此先感谢。

博尔顿

【问题讨论】:

    标签: ffmpeg aac mux


    【解决方案1】:

    我终于成功了。以下是我的代码:

    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++;
    }
    

    我不知道原因,但它有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-09
      • 2014-09-11
      • 2014-01-24
      • 2013-01-15
      • 2012-04-28
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多