我正尝试初始化一个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获取宽度和高度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)