av_read_frame獲取到AVPacket數據包AV_INPUT_BUFFER_PADDING_SIZE值和輸入文件AVCodecContext的extradata值研究

	AVPacket pkt;
	av_init_packet(&pkt); // 初始化pkt
	pkt.data = NULL;
	pkt.size = 0;
//fmt_ctx爲輸入文件的AVFormatContext指針
	av_read_frame(fmt_ctx, &pkt);
	if (pkt.stream_index == video_idx) {
		// 爲包數據添加起始碼、SPS/PPS等信息
		int m_datalen = pkt.buf->size;
		h264_mp4toannexb(fmt_ctx, &pkt, file);
	}

1:細心發現pkt.buf->size總比pkt.size多64個字節,對應着宏AV_INPUT_BUFFER_PADDING_SIZE值,所以,如果實際應用中要修改pkt中的數據,pkt.buf->size是無時無刻都要比pkt.size多64個字節。

2:pps及sps並不能從packet中獲得,而是保存在AVCodecContext的extradata數據中,比如fmt_ctx->streams[in->stream_index]->codecpar->extradata

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章