I use ffmpeg to encode picture to video stream. After I send this stream to RTP 
protocol. How I can set NAL units size. Here's my codec settings:

pAVCodecCtxEncode =  avcodec_alloc_context();
        AVCodec* codecE = avcodec_find_encoder(CODEC_ID_H264);
         if (!codecE)
         { 
         return ; // Didn't find a video stream
         }
         if(codecE->capabilities & CODEC_CAP_TRUNCATED)
         pAVCodecCtxEncode->flags|= CODEC_FLAG_TRUNCATED;       
         avcodec_get_context_defaults2(pAVCodecCtxEncode, CODEC_TYPE_VIDEO);
         
         // set codec id
         pAVCodecCtxEncode->codec_id = CODEC_ID_H264;
         pAVCodecCtxEncode->coder_type = 1;
         pAVCodecCtxEncode->thread_count = 3;
         
         // put bitrate parameters
         pAVCodecCtxEncode->bit_rate = 90000;
         pAVCodecCtxEncode->bit_rate_tolerance = 90000;
         
         // put width and height
         pAVCodecCtxEncode->width = 192;
         pAVCodecCtxEncode->height = 144;
         
         // set frame rate
         pAVCodecCtxEncode->time_base.den = 5;
         pAVCodecCtxEncode->time_base.num = 1;
         
         // set pixel format
         pAVCodecCtxEncode->pix_fmt = PIX_FMT_YUV420P;

         pAVCodecCtxEncode->gop_size = 15;
         pAVCodecCtxEncode->keyint_min = 15;
         

         pAVCodecCtxEncode->b_frame_strategy = 1;
         pAVCodecCtxEncode->max_b_frames = 300;
         pAVCodecCtxEncode->max_b_frames = 300;
         

         pAVCodecCtxEncode->qblur = 0.5;
         pAVCodecCtxEncode->qcompress = 0.5;
         pAVCodecCtxEncode->b_quant_offset = 1.25;
         pAVCodecCtxEncode->b_quant_factor = 1.25;
         pAVCodecCtxEncode->i_quant_offset = 0.0;
         pAVCodecCtxEncode->i_quant_factor = -0.71f;

         pAVCodecCtxEncode->mb_qmax = pAVCodecCtxEncode->qmax = 0.2;
         pAVCodecCtxEncode->mb_qmin = pAVCodecCtxEncode->qmin = 0;
         pAVCodecCtxEncode->max_qdiff = 0;
         
         // motion estimation range
         pAVCodecCtxEncode->me_range = 0;
         
         pAVCodecCtxEncode->error_concealment   = 3;
         pAVCodecCtxEncode->error_recognition   = 1;
        // pAVCodecCtxEncode->rtp_mode= 1;
         pAVCodecCtxEncode->rtp_payload_size= 650;

                
         if (avcodec_open(pAVCodecCtxEncode, codecE) < 0){
         
                 return ;
         }

Changing this "pAVCodecCtxEncode->rtp_payload_size " setting does nothing.
This I encode frame:

        int outbuf_size = avpicture_get_size(pAVCodecCtxEncode->pix_fmt, w, h);
        uint8_t *outbuf = (uint8_t*)av_malloc(outbuf_size);
        AVFrame *packet = avcodec_alloc_frame();
        
        packet->data[0] = (uint8_t*)Y.bytes;
        packet->data[1] = (uint8_t*)V.bytes;
        packet->data[2] = (uint8_t*)U.bytes;
        packet->data[3] = NULL;
        packet->linesize[0] = w;
        packet->linesize[1] = w/2;
        packet->linesize[2] = w/2;
        packet->linesize[3] = 0;
        pAVCodecCtxEncode->rtp_payload_size   = 500;
        int out_size = avcodec_encode_video(pAVCodecCtxEncode, outbuf, 
outbuf_size, packet);

When I get a buffer, I'm looking for 0x0000001 and is divided into NAL units. 
The size of them receive more. How can I manage it?
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to