如何使用ffmpeg从H264 SPS获取宽度和高度

如何使用ffmpeg从H264 SPS获取宽度和高度,第1张

概述如何使用ffmpeg从H264 SPS获取宽度高度

我正尝试初始化一个FFMPEG H264编解码器上下文,用SPS框架填充exTradata字段,如下所示:

#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> int main() { const char sps[] = {0x00,0x00,0x01,0x67,0x42,0x0a,0xf8,0x41,0xa2}; av_register_all(); av_log_set_level(AV_LOG_DEBUG); AVCodec *const codec = avcodec_find_decoder(CODEC_ID_H264); if (codec != NulL) { AVCodecContext* ctx = avcodec_alloc_context3(codec); ctx->deBUG = ~0; ctx->exTradata = (uint8_t *)av_malloc(sizeof(sps) + FF_input_BUFFER_padding_SIZE); ctx->exTradata_size = sizeof(sps); memcpy(ctx->exTradata,sps,sizeof(sps)); memset(&ctx->exTradata[ctx->exTradata_size],FF_input_BUFFER_padding_SIZE); if (avcodec_open2(ctx,codec,NulL) < 0) { fprintf(stderr,"Failed to open codecn"); } else { char buf[1024]; avcodec_string(buf,sizeof(buf),ctx,1); fprintf(stderr,"%sn",buf); } avcodec_close(ctx); av_free(ctx); } }

该scheme的输出是:

4/11长度的[h264 @ 0xc74010] NAL 7/3 6


[h264 @ 0xc74010] sps:0 profile:66/10 poc:0 ref:0 8×6 FRM crop:0/0/0/0 420 0/0 b8 reo:-1


vIDeo:h264,1参考帧,无(左),q = 2-31,200kb / s

输出结果显示,sps已经被解码,所需信息通过h264_ps.c ( mb_wIDth = 8,mb_height = 6,crop_left = crop_right = crop_top = crop_bottom = 0)来计算宽度和高度。

如何正确检测主窗口的拐angular半径

我怎样才能让WNDCLASS有一个位图图像作为背景?

linux:从C程序直接访问硬盘(没有任何FS)

如果在焦点丢失或崩溃的情况下如何禁用辅助键(粘滞键,切换键等)?

如何获取位于windows应用程序文件夹内的文件的位置

然后,我期待获得调用avcodec_string的宽度和高度。


有没有办法做到这一点,而不解码帧?

在linux中写入和读取相同的fd而不使用fsync

在windows上获取实际的文件名(正确的shell)

什么是在C ++ gettimeofday()最好的替代库?

如果没有访问argv ,我如何获取程序名称?

从雅虎发送邮件在c#windows应用程序中的valIDation错误

它可以在AVCodecContext.wIDth和avcodec_open2()之后的AVCodecContext.height中使用,如果你正确格式化你的额外数据。

这篇文章会告诉你应该如何为H.264流的顺序/图像参数集合形成可能的位置

用一个虚拟缓冲器提供解码器使获得在SPS中编码的大小成为可能。


使用空PPS和空的非IDR SliCE:

int got_frame = 0; AVPacket pkt; av_init_packet(&pkt); char buffer[] = {0x00,0x68,0xff,0x21}; pkt.data = buffer; pkt.size = sizeof(buffer); AVFrame* frame = av_frame_alloc(); avcodec_decode_vIDeo2(ctx,frame,&got_frame,&pkt); av_frame_free(&frame); fprintf(stderr,"size: %dx%dn",ctx->wIDth,ctx->height);

运行此代码打印错误,但它允许从SPS提取宽度和高度:

[h264 @ 0xd0d040] Missing reference picture,default is 0 [h264 @ 0xd0d040] decode_slice_header error size: 128x96

总结

以上是内存溢出为你收集整理的如何使用ffmpeg从H264 SPS获取宽度和高度全部内容,希望文章能够帮你解决如何使用ffmpeg从H264 SPS获取宽度和高度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1281897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存