在AVCodecContext中,流数据存储在AVPacket结构中。AVPacket结构包含了媒体数据的详细信息,如数据指针、数据大小、时间戳等。
以下是一个简单的代码示例,演示了如何从AVCodecContext中获取流数据:
// 创建AVPacket对象
AVPacket* packet = av_packet_alloc();
// 从AVCodecContext中读取数据流
while (av_read_frame(formatContext, packet) >= 0) {
// 确保数据流属于目标媒体流
if (packet->stream_index == targetStreamIndex) {
// 处理数据流
// packet->data 指向数据流的指针
// packet->size 表示数据流的大小
// packet->pts 表示数据流的时间戳
// 在这里可以对数据流进行处理,比如解码、保存等等
// 释放数据流内存
av_packet_unref(packet);
}
}
// 释放AVPacket内存
av_packet_free(&packet);
在上面的示例中,首先创建一个AVPacket对象,然后使用av_read_frame函数从AVCodecContext中读取数据流。然后,我们可以根据需要处理数据流,比如解码、保存等等。最后,使用av_packet_unref函数释放数据流内存,av_packet_free函数释放AVPacket对象内存。
请注意,上述示例仅涉及了从AVCodecContext中获取流数据的基本步骤,具体实现可能需要根据实际情况进行调整。