没有解码/编码的FFmpeg remux
Posted
技术标签:
【中文标题】没有解码/编码的FFmpeg remux【英文标题】:FFmpeg remux without decode/encode 【发布时间】: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 打开它时,播放持续了正确的时间,但没有输出音频。 任何帮助将不胜感激,在此先感谢。
博尔顿
【问题讨论】:
【参考方案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++;
我不知道原因,但它有效!
【讨论】:
以上是关于没有解码/编码的FFmpeg remux的主要内容,如果未能解决你的问题,请参考以下文章