> -----Original Message-----
> From: [email protected] [mailto:libav-user-
> [email protected]] On Behalf Of Yadnesh Phadke
> Sent: 02 July 2010 07:27
> To: [email protected]
> Subject: [libav-user] Stream 3GP format over HTTP
> 
> Hi All,
> 
> I have asked the same question on the ffmpeg_user mailing list, but I
> am
> asking here too as I have no solution as yet
> 
> 
> 
> I want to stream media files from my Ubuntu Linux 8.04 and play the
> stream
> on my Android.  Initially, I am trying to stream media from a file over
> HTTP
> in 3GP format using ffserver and ffmpeg and play the stream on the same
> machine using ffplay
> 
> When I use ffplay I see the following:
> *http://127.0.0.1:8090/test1.3gp: Invalid data found when processing
> input*
> 
> and ffserver shows following error when I execute ffplay:
> =======================================================================
> ==
> ./ffserver -f 3gp_conf1
> FFserver version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
>   built on Jul  1 2010 14:57:41 with gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
>   configuration:
>   libavutil     50.15. 1 / 50.15. 1
>   libavcodec    52.72. 2 / 52.72. 2
>   libavformat   52.64. 2 / 52.64. 2
>   libavdevice   52. 2. 0 / 52. 2. 0
>   libswscale     0.11. 0 /  0.11. 0
> Thu Jul  1 17:37:28 2010 FFserver started.
> Thu Jul  1 17:37:44 2010 127.0.0.1 - - [GET] "/feed1.ffm HTTP/1.1" 200
> 8245
> Thu Jul  1 17:37:48 2010 *Codec for stream 0 does not use global
> headers but
> container format requires global headers*
> Thu Jul  1 17:37:48 2010 *Codec for stream 1 does not use global
> headers but
> container format requires global headers*
> Thu Jul  1 17:37:48 2010 *muxer does not support non seekable output*
> Thu Jul  1 17:37:48 2010 *Error writing output header*
> Thu Jul  1 17:37:48 2010 127.0.0.1 - - [GET] "/test1.3gp HTTP/1.1" 200
> 79
> Thu Jul  1 17:37:48 2010 127.0.0.1 - - [POST] "/feed1.ffm HTTP/1.1" 200
> 389120
> =======================================================================
> ==
> *
> *
> I see* similar error* when I try to *stream mp4* format.  But when I
> choose
> format (in ffserver config) as *mpeg, **no error* is seen and ffplay
> shows
> the A/V.  But I finally want to view the video on Android and it does
> not
> support mpeg file format.  So I need to stream in either mp4 or 3gp
> format.
>  I have tried using 2/3 different media files (.mp4, .3gp, .ts) for
> input
> and land into same error.
> I can create mp4/3gp files using ffmpeg and I am able to play these
> files on
> my Android mobile.  But I do not want to copy all the content, I want
> to
> stream from my Ubuntu box and view on Android.
> 
> For adding global headers, Are there any specific flags that I need to
> use
> with ffmpeg?  is there anything extra needed in ffserver configuration
> to do
> 3GP streaming?
> 
> I have done much google search and also tried some ffmpeg options that
> I
> thought to be possible solutions, but with no luck.  Now I need expert
> opinion :)  Please flood in your thoughts.
> 
> *ffmpeg command*
> *
> =======================================================================
> ==
> ./ffmpeg -i ../../Media/747.3gp -acodec aac -vcodec mpeg4 -sameq -
> vglobal 2
> http://127.0.0.1:8090/feed1.ffm
> FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
>   built on Jul  1 2010 14:57:41 with gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
>   configuration:
>   libavutil     50.15. 1 / 50.15. 1
>   libavcodec    52.72. 2 / 52.72. 2
>   libavformat   52.64. 2 / 52.64. 2
>   libavdevice   52. 2. 0 / 52. 2. 0
>   libswscale     0.11. 0 /  0.11. 0
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../../Media/747.3gp':
>   Metadata:
>     major_brand     : 3gp4
>     minor_version   : 512
>     compatible_brands: 3gp4
>     encoder         : avc2.0.11.1110
>     encoder-jpn     : avc2.0.11.1110
>   Duration: 00:00:31.20, start: 0.000000, bitrate: 136 kb/s
>     Stream #0.0(eng): Video: mpeg4, yuv420p, 160x128 [PAR 1:1 DAR 5:4],
> 120
> kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
>     Stream #0.1(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
> Output #0, ffm, to 'http://127.0.0.1:8090/feed1.ffm':
>   Metadata:
>     encoder         : Lavf52.64.2
>     Stream #0.0(eng): Audio: aac, 44100 Hz, 1 channels, s16, 8 kb/s
>     Stream #0.1(eng): Video: mpeg4, yuv420p, 192x144, q=2-31, 64 kb/s,
> 1000k
> tbn, 5 tbc
> Stream mapping:
>   Stream #0.1 -> #0.0
>   Stream #0.0 -> #0.1
> Press [q] to stop encoding
> Warning, using s16 intermediate sample format for resampling
> [mpeg4 @ 0x8ae3f70]rc buffer underflow
> frame=   20 fps=  0 q=2.0 size=      52kB time=3.88 bitrate=
> 109.9kbits/s
> dup=0
> frame=   38 fps= 37 q=2.4 size=     100kB time=7.57 bitrate=
> 108.2kbits/s
> dup=0
> frame=   57 fps= 37 q=2.5 size=     140kB time=11.33 bitrate=
> 101.2kbits/s
> dup=0
> frame=   75 fps= 37 q=2.5 size=     180kB time=14.98 bitrate=
> 98.5kbits/s
> dup=0
> frame=   92 fps= 36 q=2.9 size=     216kB time=18.30 bitrate=
> 96.7kbits/s
> dup=0
> frame=  107 fps= 35 q=4.9 size=     256kB time=21.40 bitrate=
> 98.0kbits/s
> dup=0
> frame=  123 fps= 35 q=3.2 size=     300kB time=24.59 bitrate=
> 99.9kbits/s
> dup=0
> frame=  140 fps= 35 q=3.7 size=     332kB time=27.89 bitrate=
> 97.5kbits/s
> dup=0
> frame=  154 fps= 34 q=3.6 size=     364kB time=30.79 bitrate=
> 96.8kbits/s
> dup=0
> frame=  157 fps= 34 q=3.4 Lsize=     380kB time=31.21 bitrate=
> 99.8kbits/s
> dup=0 drop=622
> video:311kB audio:37kB global headers:0kB muxing overhead 9.150682%
> =======================================================================
> ==
> *
> *
> *
> *
> 
> If I execute same ffmpeg command again without restarting ffserver I
> see
> following error.  Is this expected?
> =======================================================================
> ==
> ./ffmpeg -i ../../Media/747.3gp -acodec aac -vcodec mpeg4 -sameq -
> vglobal 2
> http://127.0.0.1:8090/feed1.ffm
> FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
>   built on Jul  1 2010 14:57:41 with gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
>   configuration:
>   libavutil     50.15. 1 / 50.15. 1
>   libavcodec    52.72. 2 / 52.72. 2
>   libavformat   52.64. 2 / 52.64. 2
>   libavdevice   52. 2. 0 / 52. 2. 0
>   libswscale     0.11. 0 /  0.11. 0
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../../Media/747.3gp':
>   Metadata:
>     major_brand     : 3gp4
>     minor_version   : 512
>     compatible_brands: 3gp4
>     encoder         : avc2.0.11.1110
>     encoder-jpn     : avc2.0.11.1110
>   Duration: 00:00:31.20, start: 0.000000, bitrate: 136 kb/s
>     Stream #0.0(eng): Video: mpeg4, yuv420p, 160x128 [PAR 1:1 DAR 5:4],
> 120
> kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
>     Stream #0.1(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
> [mpeg4 @ 0x8ae3f70]Error parsing rc_eq "comment": undefined constant or
> missing (
> Output #0, ffm, to 'http://127.0.0.1:8090/feed1.ffm':
>     Stream #0.0(eng): Audio: aac, 44100 Hz, 1 channels, s16, 8 kb/s
>     Stream #0.1(eng): Video: mpeg4, yuv420p, 192x144, q=2-31, 64 kb/s,
> 1000k
> tbn, 5 tbc
> Stream mapping:
>   Stream #0.1 -> #0.0
>   Stream #0.0 -> #0.1
> Error while opening encoder for output stream #0.1 - maybe incorrect
> parameters such as bit_rate, rate, width or height
> =======================================================================
> ==
> *
> *
> 
> *
> *
> *
> *ffserver config*:
> =======================================================================
> ==
> Port 8090
> BindAddress 0.0.0.0
> MaxHTTPConnections 20
> MaxClients 10
> MaxBandwidth 100000
> CustomLog -
> NoDaemon
> ##################################################################
> <Feed feed1.ffm>
> File /tmp/feed1.ffm
> FileMaxSize 2M
> ACL allow 127.0.0.1
> </Feed>
> 
> ##################################################################
> <Stream test1.3gp>
> Feed feed1.ffm
> Format 3gp
> AudioBitRate 8
> AudioChannels 1
> AudioSampleRate 44100
> VideoBitRate 64
> VideoBufferSize 20
> VideoFrameRate 5
> VideoSize 192x144
> AudioCodec aac
> VideoCodec mpeg4
> Preroll 15
> </Stream>
> 
> ##################################################################
> # Server status
> <Stream stat.html>
> Format status
> ACL allow 127.0.0.1
> </Stream>
> 
> # Redirect index.html to the appropriate site
> <Redirect index.html>
> =======================================================================
> ==
> 
> 
> --
> Regards,
> Yadnesh
> ----------------------------------------------------------------------
> Christopher Morley - There is only one success - to be able to spend
> your
> life in your own way.
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Hi,

I happen to have been looking into this issue too.  The 3gp and mpeg4 formats 
are based on the Quicktime mov format.  This format works by having several 
sections in the file with tags, with each tag needing to specify the size of 
the tag at the start.  One of these tags is the size of all the data in the 
file, which is not known in advance of encoding (only a worst guess can be made 
based on the bitrate and bitrate tolerance).  Unlike ASF format, for example, 
these formats must have the size element specified, or else they won't work.  
So libavformat must first write the data to a file, and then go back and fill 
in the size of the elements, which it obviously can't do with an http stream 
(since the data will be at the client by the time it needs to go back and fill 
it in).

The best solution to this just now is to pre-convert any videos into 3gp format 
and then stream them directly.  A future solution (which I am looking at a bit) 
is to take the worst guess of the data size and then fill in any space not used 
with some sort of padding.  This will result in files that are always a bit too 
big, but will at least allow the streaming of the data.

In the long long run, someone should come up with a better file format for 
streaming that can be indexed that doesn't need to know the size of the data in 
advance (flv could actually be quite good at this as it is searchable from the 
end as well as the start, meaning that you could add a key-frame index to the 
end of the file after streaming it - unfortunately, most standard media players 
can't play flv and others wouldn't know to look at the end of the file for the 
index).

Andrew :)

---------------------------------------------------------

   Andrew G D Rowley
   Senior Development Officer

   Research Computing Services
   The University of Manchester
   Devonshire House, Oxford Road
   Manchester, M13 9PL
 
   t :  +44 (0) 161 275 0685
   e :  [email protected]
   w :  www.manchester.ac.uk/researchcomputing
 
---------------------------------------------------------

_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to