FFmpeg remux без декодирования / кодирования - PullRequest
0 голосов
/ 08 июня 2011

Я хочу использовать 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, воспроизведение длится в течение нужного времени, но звук не выводится. Любая помощь будет принята с благодарностью, заранее спасибо.

Болтон

1 Ответ

0 голосов
/ 09 июня 2011

Наконец я это сделал. Ниже мой код:

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

Я не знаю причину, но это работает!

...