阅读H264 SPS&使用libavformat API的PPS NAL字节 [英] Read H264 SPS & PPS NAL bytes using libavformat APIs

查看:191
本文介绍了阅读H264 SPS&使用libavformat API的PPS NAL字节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何阅读H264 SPS&使用libavformat API的PPS NAL字节?

How to read H264 SPS & PPS NAL bytes using libavformat APIs?

我尝试从.mp4视频(编解码器为h264)文件中使用"av_read_frame(input_avFormatContext,& avPkt)" API将视频数据读取为"AVPacket"结构.

I tried reading video data to 'AVPacket' structure using "av_read_frame(input_avFormatContext, &avPkt)" API, from a .mp4 video (codec is h264) file.

我将avPkt->数据转储到文件中.但是读取的第一帧是IDR帧.

I dumped avPkt->data to a file. But 1st frame read is an IDR frame.

使用"ffmpeg -i video.mp4 video.h264"生成的文件将包含SPS&在IDR启动之前启动PPS.

File generated using "ffmpeg -i video.mp4 video.h264" will contain SPS & PPS in the starting before start of IDR.

我想从.mp4文件中提取原始.h264视频,并以SPS,PPS,IDR,P1,P2 ...的顺序转储.

I want to extract raw .h264 video from .mp4 file and dump it in SPS,PPS, IDR, P1, P2... order.

我想使用libavformat API以编程方式完成此操作.

I want to get this done programmatically using libavformat APIs.

有什么想法吗?

谢谢.

推荐答案

在mp4-容器(也为mkv)中,PPS/SPS与帧数据分开存储在全局头中.要从libav * API访问它们,您需要在AVStream的AVCodecContext中寻找与所需视频流相关的Extradata字段.另外,Extradata的格式可以与标准H.264 NAL不同,因此请查看MP4容器规范以了解格式说明.

In mp4-container (mkv also) PPS/SPS are stored separate from frame data in global headers. To access them from libav* APIs you need to look for extradata field in AVCodecContext of AVStream which relate to needed video stream. Also extradata can have different format from standard H.264 NALs so look in MP4-container specs for format description.

这篇关于阅读H264 SPS&使用libavformat API的PPS NAL字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆