[FFmpeg-user] Bitstream "h264_mp4toannexb" filter does not work

Andrey Mochenov andrey.mochenov at idomoo.com
Thu Dec 26 09:39:28 CET 2013


Hi all,
We are using FFmpeg libraries git-ee94362 libavformat v55.2.100. Our
purpose is to mux two streams (video and audio) into M3U8 playlist using
HLS.
We are using AV_CODEC_ID_H264 output encoder, AV_PIX_FMT_YUV420P output
video pixel format and CODEC_FLAG_GLOBAL_HEADER flag for the encoder.
The last causes us to use "h264_mp4toannexb" bit stream filter.
So, here is the code snippet:

AVPacket outpkt = {0};
int isGotVideoPacket = 0;

av_init_packet(&outpkt);

// convert time in stream time base units, so that the encoder will fill
the packet appropriately
out_video_frame->pts = (int64_t) (video_frame_count *
in_video_frame_duration / av_q2d(out_video_stream->time_base));

int ret = avcodec_encode_video2(enc_out_video_ctx, &outpkt,
out_video_frame[i], &isGotVideoPacket);

assert(0 <= ret);

// if size is zero, it means the image was buffered
if ((1 == isGotVideoPacket) && (0 < outpkt.size)) {

 AVPacket new_outpkt = outpkt;

 if ((AVBitStreamFilterContext*) 0 != vbsf_ctx) {
  AVPacket new_outpkt = outpkt;

  ret = av_bitstream_filter_filter(vbsf_ctx, enc_out_video_ctx, (const
char*)0,
   &new_outpkt.data, &new_outpkt.size, outpkt.data, outpkt.size,
   outpkt.flags & AV_PKT_FLAG_KEY);

  if (ret > 0)
  {
   outpkt = new_outpkt;
  }
  else
  {
   // We get ret = -22
   char errbuf[128] = "";

                        // Both the functions get "Error number -22
occurred" that don't explain anything
    av_strerror (ret, errbuf, 128);
   av_make_error_string (errbuf, 128, ret);

  }

  assert(0 <= ret);

 }

 outpkt->stream_index = output_video_stream->index;

 // If to comment av_bitstream_filter_filter() and "if-else", then
 // At frame #37 we get the following error from
av_interleaved_write_frame():
 // [mpegts @ 09628140] H.264 bitstream malformed, no startcode found, use
the h264_mp4toannexb bitstream filter (-bsf h264_mp4toannexb).
 ret = av_interleaved_write_frame(ofmt_ctx, &outpkt);

 assert(0 <= ret);
}


Our questions:
1. What is the meaning of the "-22" error from av_bitstream_filter_filter()?
2. Where can we get full FFMPEG error code description list?
3. If we are using av_bitstream_filter_filter() right? If no, what is the
right way?

Andrey Mochenov.



<http://www.idomoo.com/>


More information about the ffmpeg-user mailing list