Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ffmpeg将x265 nal_单元解码为yuv_Ffmpeg_Decode_Yuv_Hevc - Fatal编程技术网

使用ffmpeg将x265 nal_单元解码为yuv

使用ffmpeg将x265 nal_单元解码为yuv,ffmpeg,decode,yuv,hevc,Ffmpeg,Decode,Yuv,Hevc,我正在编写一种skype应用程序,其中我首先使用x265编码器对视频进行编码。下面您可以看到编码器的设置以及对视频进行编码并获取nal_单位的线路 x265_param_default_preset(param, "ultrafast", "zerolatency"); x265_param_parse(param, "fps", "30"); x265_param_parse(param, "input-res", "160x120"); //wxh x265_param_parse(para

我正在编写一种skype应用程序,其中我首先使用x265编码器对视频进行编码。下面您可以看到编码器的设置以及对视频进行编码并获取nal_单位的线路

x265_param_default_preset(param, "ultrafast", "zerolatency");
x265_param_parse(param, "fps", "30");
x265_param_parse(param, "input-res", "160x120"); //wxh
x265_param_parse(param, "bframes", "3");
x265_param_parse(param, "rc-lookahead", "5");
x265_param_parse(param, "repeat-headers", "1");

x265_nal *pp_nal=NULL;
uint32_t pi_nal=0;

int encoded = x265_encoder_encode(encoder, &pp_nal, &pi_nal, pic_in, pic_recon);
在此之后,我将pp_nal和pi_nal发送到客户端,然后我想用ffmpeg将这些nal_单元解码到yuv。我初始化解码器:

AVCodec *codec;
AVCodecContext *av_codec_context = NULL;
avcodec_register_all();

int frame_count;
FILE *f;
AVFrame *frame;
AVPacket avpkt;
av_init_packet(&avpkt);

codec = avcodec_find_decoder(AV_CODEC_ID_H265);
if (!codec) {
    fprintf(stderr, "Codec not found\n");
    exit(1);
}

av_codec_context = avcodec_alloc_context3(codec);
if (!av_codec_context) {
    fprintf(stderr, "Could not allocate video codec context\n");
    exit(1);
}
av_codec_context->width = 160;
av_codec_context->height = 120;
av_codec_context->extradata = NULL;
av_codec_context->pix_fmt = PIX_FMT_YUV420P;

/* open it */
if (avcodec_open2(av_codec_context, codec, NULL) < 0) {
    fprintf(stderr, "Could not open codec\n");
    exit(1);
}
AVFrame *av_frame_ = av_frame_alloc();
frame_count = 0;
int got_frame;

但这不起作用,并给出以下错误“error parsing nal unit”。我做错了什么?

我想你要么需要在编解码器上下文中设置extradata字段,要么切换x265使用annexB。但我假设h264位流与h254.seconding@szatmary注释相似,假设相同
AVPacket av_packet;
av_new_packet(&av_packet, pp_nal->sizeBytes);
av_packet.data = (uint8_t *) pp_nal->payload;
av_packet.size = pp_nal->sizeBytes;

avcodec_decode_video2(av_codec_context, av_frame_, &got_frame, &av_packet);