[Ffmpeg-devel] how to decode RTP packet containing mp3 data

sanjay kumar gupta sanjay417
Thu Feb 22 06:31:25 CET 2007


Hi Lu,
as you suggested, I have broken the each lines which was very big. please find the content of my previous post below.
-----------------------
Hi All,
 Helix server in LAN is streaming mp3 file and I am receiving the RTP
 packets.
 I would like to decode this RTP packets data and get the decoded 
buffer and its length so that I can play this decoded data using SDL 
library.
I have a program which plays mp3 locally. To play mp3 file locally, I 
needed format context and codec context pointers. Piece of code used to
 decode the local audio file is given below.
But in case of RTP packet containing mp3 data.
how to get the pFormatCtx. can we get the stream info as with local 
file as it is needed to get the pCodecCtx which in turn used to get the
 codec id.
Any example code or document would be helpful.
Thanks in advance for help.
//---------------
// Register all formats and codecs
 av_register_all();

 // Open video file
 if(av_open_input_file(&pFormatCtx, argv[1]/*mp3 file name*/, NULL, 0, 
NULL)!=0)
    return -1; // Couldn't open file

 // Retrieve stream information
 if(av_find_stream_info(pFormatCtx)<0)
         return -1; // Couldn't find stream information

    // Find the first video stream
    audioStream=-1;
    for(i=0; i<pFormatCtx->nb_streams; i++)
    {
    if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_AUDIO)
         {
              audioStream=i;
              break;
         }
    }
    if(audioStream == -1)
         return -1; // Didn't find a video/audio stream

    // Get a pointer to the codec context for the video stream
    pCodecCtx=pFormatCtx->streams[audioStream]->codec;

    // Find the decoder for the video stream
    pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
    if(pCodec==NULL)
         return -1; // Codec not found

    // Open codec
    if(avcodec_open(pCodecCtx, pCodec)<0)
         return -1; // Could not open codec

    while(av_read_frame(pFormatCtx, &packet)>= 0 )
    {
         // Is this a packet from the audio stream?
         if(packet.stream_index==audioStream)
         {
              // Decode audio frame
              len=avcodec_decode_audio(pCodecCtx, outBuf, &outBufSize, 
packet.data, packet.size);
              if (len < 0)
              {
                   printf("Error while decoding\n");
              }
              else
              {
                         //send this decoded audio to SDL.
              }
         }
         // Free the packet that was allocated by av_read_frame
         av_free_packet(&packet);
    }
//---------------------

Thanks & Regards,
Sanjay
----------------------
On Thu, 22 Feb 2007 Luca Barbato wrote :
>Please break your lines at 78 cols.
>
>sanjay kumar gupta wrote:
> > Hi All,
> > Helix server in LAN is streaming mp3 file and I am receiving the RTP packets.
> > Any example code or document would be helpful.
>
>Check ffplay, you need to add a playout buffer or the player will starve.
>
>lu
>
>--
>
>Luca Barbato
>
>Gentoo/linux Gentoo/PPC
>http://dev.gentoo.org/~lu_zero
>
>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel at mplayerhq.hu
>http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel




More information about the ffmpeg-devel mailing list