Hey, I got the same. I want to stream raw h264 streams via RTSP/RTP. In another post "Re: [libav-user] Decode h264/rtp video -> problem with SPS/PPS and extradata" I mentioned already my problem.
Did you get any further? I tried to concatenate multiple received RTP-Frames, always prepending 0x00, 0x00,0x00,0x01. But I still get "-1" after avcodec_video_decode. Is there no other way to initialize the decoder correctly for h264 using SDP (SPS,PPS)? Cheers and thx for your help! Sven 2010/9/14 Alex Grosu <[email protected]>: > Hello Huy > > I will check your information. Great advices, thanks a lot > Regards, > Alex > > Nhat Huy wrote: >> >> On Fri, Sep 10, 2010 at 5:38 PM, Alex Grosu <[email protected]> wrote: >> >> >>> >>> Hello >>> >>> The information you passed will help me later, thanks. In this moment, my >>> application communicates with an embedded product which sends only one >>> frame >>> per NAL in this moment. Later, it will send inceed multiple slices, and >>> we >>> said that we will see what we are going to do then. Is there any >>> possibility >>> to find which slice is the start of a frame sequence and which slice is >>> the >>> end of it? In you case for example, is there a possibility to find the >>> first >>> 5 from I frame and the last 5 from I frame (or, the first 1 and last 1 >>> from >>> B frame / P frame) ? >>> Regards, >>> Alex >>> >>> >>> Nhat Huy wrote: >>> >>> >>>> >>>> On Thu, Sep 9, 2010 at 9:00 PM, Alex Grosu <[email protected]> wrote: >>>> >>>> >>>> >>>> >>>>> >>>>> Hello Huy >>>>> >>>>> Thanks a lot for the answer. I found this solution 2 days ago, but >>>>> first >>>>> I >>>>> thought it was a dirty one. I wanted to check this before posting here >>>>> again, but you took it ahead. Your pointing shows me that in fact this >>>>> is >>>>> not a dirty solution, so thanks a lot for support. >>>>> So, what I had to do (as Huy suggested), was to couple 7 8 and 5 NAL >>>>> types >>>>> into only one buffer and to present it to libavcodec (in >>>>> avcodec_decode_video2 function). >>>>> Thus, using the [ and ] characters to delimit buffer boundaries, I was >>>>> coupling following before send them to libavcodec: >>>>> [7 8 5] [1] [1] [1] [1] [7 8 5] [1] [1] [1] and so on. >>>>> I don't receive errors anymore. Everything works now >>>>> >>>>> Thank you >>>>> >>>>> >>>>> Nhat Huy wrote: >>>>> >>>>> >>>>> >>>>> >>>>>> >>>>>> On Thu, Sep 2, 2010 at 3:58 PM, Alex Grosu <[email protected]> wrote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> Hello >>>>>>> >>>>>>> I am currently decoding h264 streams (with libavcodec) and I am stuck >>>>>>> with >>>>>>> the logic for SPS (sequence parameter set) and PPS (picture parameter >>>>>>> set). >>>>>>> The board from which I am receiving the packages is sending a NAL >>>>>>> unit >>>>>>> in >>>>>>> each packet. The sequence for NAL types is: >>>>>>> 7(SPS) 8(PPS) 5 1 1 1 1 7 8 5 1 1 1... >>>>>>> I am putting in front of each NAL the start sequence 0x000001 and >>>>>>> sending >>>>>>> this packet to avcodec_decode_video2. When 7 and 8 types are coming, >>>>>>> I >>>>>>> am >>>>>>> doing the same logic, but avcodec_decode_video2 is returning -1. >>>>>>> After >>>>>>> this, >>>>>>> all the received NALs are decoded and the images are displayed. Every >>>>>>> time >>>>>>> when SPS and PPS are coming, avcodec_decode_video2 returns -1 >>>>>>> (fails). >>>>>>> I >>>>>>> searched all over the net , and I still can't understand how to fill >>>>>>> up >>>>>>> the >>>>>>> extradata and extradata_size from AVCodecContext used. All I found is >>>>>>> this >>>>>>> link: >>>>>>> http://www.mail-archive.com/[email protected]/msg04939.html. >>>>>>> As I saw from here: >>>>>>> "To decode H.264 stream you need to have SPS and PPS NAL units also >>>>>>> .". >>>>>>> Ok, >>>>>>> I have them, but frankly I don't know how to use them. At first, I >>>>>>> thought >>>>>>> that avcodec_decode_video2 will "automatically" use them. But >>>>>>> returning >>>>>>> -1, >>>>>>> I don't see how. Also, If I am discarding SPS and PPS from sending >>>>>>> them >>>>>>> to >>>>>>> libavcodec, nothing is decoded anymore. >>>>>>> Can you please give me a hint? >>>>>>> Thank you a lot ! >>>>>>> _______________________________________________ >>>>>>> libav-user mailing list >>>>>>> [email protected] >>>>>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> I think you should read H.264 bit stream structure and use these tools >>>>>> to >>>>>> analyze a NAL unit of H.264 bitstream. >>>>>> http://www.codecian.com/ >>>>>> http://tsviatko.jongov.com/index_prj_h264videoesviewer.htm >>>>>> >>>>>> When FFmpeg decode a NAL unit, if the nal_unit_type equal 7,8 it will >>>>>> continue decode to find the IDR nal_unit. In your case, I think that >>>>>> FFmpeg >>>>>> found SPS, PPS but it can not find IDR thus it returns -1. >>>>>> >>>>>> Hope it helps. >>>>>> >>>>>> Huy. >>>>>> _______________________________________________ >>>>>> libav-user mailing list >>>>>> [email protected] >>>>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> libav-user mailing list >>>>> [email protected] >>>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>>> >>>>> >>>>> >>>>> >>>> >>>> Hi, >>>> >>>> If you coupled H.264 slice as [7 8 5] [1] [1] [1] [1] [7 8 5] [1] [1] >>>> [1] >>>> and so on, it can work well only in single slice/ frame case. >>>> If you use multiple slice , it goes wrong. >>>> >>>> For ex. my sequence has 5 frame I B B B P, and number of slices is 4 per >>>> frame. The NAL_unit_type of bit stream is: >>>> [7 8 5 5 5 5][1 1 1 1][1 1 1 1][1 1 1 1][1 1 1 1] >>>> I use [ and ] to mark the frame boundary. >>>> >>>> When you feed avcodec_decode_video2, the input buffer must contains >>>> whole >>>> frame data. >>>> Thus, the problem that you have to calculate exactly the input buffer >>>> length, and feed it enough data plus some padding if necessary before >>>> pass >>>> it to avcodec_decode_video2. >>>> >>>> Huy. >>>> _______________________________________________ >>>> libav-user mailing list >>>> [email protected] >>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>> >>>> >>>> >>>> >>> >>> _______________________________________________ >>> libav-user mailing list >>> [email protected] >>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>> >>> >> >> Hi, >> >> There is a syntax element named first_mb_in_slice in slice header. It >> describes the position of the first macroblock in that slice. It equals 0 >> to >> indicate a new frame. >> >> I am not sure that this information can help or not. >> >> I just know that when I call av_read_frame, I can receive a buffer >> contained >> whole frame data. But I do not know how can it do this ? >> >> Huy. >> _______________________________________________ >> libav-user mailing list >> [email protected] >> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >> >> > > _______________________________________________ > libav-user mailing list > [email protected] > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
