On Thu, Apr 26, 2012 at 01:53, Григорий <[email protected]> wrote: > Alex Cohn <[email protected]> писал(а) в своём письме Wed, 25 Apr > 2012 21:59:34 +0400: > > >> On Apr 25, 2012 8:27 PM, "Григорий" <[email protected]> wrote: >>> >>> >>> Alex Cohn <[email protected]> писал(а) в своём письме Wed, 25 Apr >> >> 2012 17:54:44 +0400: >>> >>> >>>> On Wed, Apr 25, 2012 at 16:45, Григорий <[email protected]> wrote: >>>>> >>>>> >>>>> Andrey Utkin <[email protected]> писал(а) в своём письме >> >> Wed, >>>>> >>>>> 25 Apr 2012 17:29:09 +0400: >>>>> >>>>> >>>>>> 25 апреля 2012 г. 15:52 пользователь Григорий <[email protected]> >>>>>> написал: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Hi all. >>>>>>> I've built libffmpeg for Android and am trying to decode H.264 stream >>>>>>> using >>>>>>> it. I'm receiving that stream via RTMP connection and passing all >> >> video >>>>>>> >>>>>>> packets (excluding first byte that contains flags related to RTMP) to >> >> the >>>>>>> >>>>>>> avcodec_decode_video2 function. With H.263 it works perfectly, but >> >> when I >>>>>>> >>>>>>> try to use the same code (only with codec ID changed) for H.264, >>>>>>> every >>>>>>> call >>>>>>> to avcodec_decode_video2 returns -1 and nothing gets decoded. >>>>>>> Here is the output: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Do you know libavformat can read and demux RTMP stream by itself? >>>>>> Seems like problem in your demuxer, because decoding the frames it >>>>>> produces fail. >>>>>> >>>>> >>>>> Yes I know, but I need more than simply receiving and playing, this >> >> will be >>>>> >>>>> a kind of VoIP service. My demuxer seems to work fine - I am able to >>>>> successfully decode audio using Speex and video using libavcodec when >> >> it is >>>>> >>>>> encoded into H.263. Only problem is with H.264. >>>> >>>> >>>> >>>> Packing of h264 into a stream is not trivial. You may find some >>>> curious information at >>>> >> http://livertmpjavapublisher.blogspot.com/2011/06/h264-avcvideopacket.html >>>> >>>> >>>> Alex >>>> _______________________________________________ >>>> Libav-user mailing list >>>> [email protected] >>>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >>> >>> >>> Thank you for this link. I've made it to parse the decoder configuration >> >> record, extract SPS, PPS and some other things. I've tried to pass PPS and >> SPS to avcodec_decode_video2 but it still returns -1, prints "no frame!" >> and does not decode anything else. Prepending 0x00000001 before them or >> making AVCDCR as described here >> >> http://stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodecgive >> the same result. >> >> H264 decoder expects SPS and PPS to arrive together with the first (IDR) >> frame. >> >> Удачи, >> Alex > > > So I'm doing the following: > - Create a buffer > - Get a video RTMP packet from the queue > - Read 3 fields at the beginning of it - FLV flags (1 byte), AVC packet type > (1 byte), and CompositionTime (24-bit integer) > - If AVC packet type is 0, parse the rest of the packet as a decoder > configuration record. Build AVCDCR with PPS, SPS, AVCProfileIndication, > profile_compatibility and AVCLevelIndication and append it to the buffer. > - If AVC packet type is 1 and there is something in the buffer, append > packet (usually starts with 0x00000002) to the buffer, pass the buffer > contents to avcodec_decode_video2 and clear the buffer. > - If the buffer is empty, simply pass the packet to avcodec_decode_video2. > At the moment when I call avcodec_decode_video2 with buffer contents (that > consist of 2 AVCDCRs and one encoded frame), before lots of "no frame!" it > prints "Current profile doesn't provide more RBSP data in PPS, skipping". I > think I've made some progress but am still doing something wrong.
I will not have time to look deeper into this until next week, but maybe you could try to use the native RMTP support in libavformat? Alex _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
