[FFmpeg-user] Problem with playing audio
basteon
basteon at gmail.com
Fri Aug 23 03:27:08 CEST 2013
hi,
You must use
packet.pos = 0;
or try verbosive logging
On 20 August 2013 14:04, Anitha Susan Varghese
<anithasusan at tataelxsi.co.in>wrote:
> Hi
>
> Myself trying to play an audio file using libavcodec in qt5 .While trying
> to play i am unable to play the the file.
> while decoding the file using av_read_frame()
> audioStream->index=0
> and packet.stream_index is some higher nos .so avcodec_decode_audio4() is
> not getting executed.Why is it so?
>
> This is my program. My output is also given below.Please help me in
> solving this.
>
> -------------------------------------------------------------------------------------------------------------------------------------
> #include <QApplication>
> #include <QtDebug>
> #include <ao/ao.h>
>
> extern "C" {
> #include "libavutil/samplefmt.h"
> #include "libavcodec/avcodec.h"
> #include "libavutil/mathematics.h"
> #include "libavutil/avutil.h"
> #include "libavformat/avformat.h"
> #include "libswscale/swscale.h"
> #include "libavutil/dict.h"
> #include <ao/ao.h>
> #include "libavformat/version.h"
> }
> #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
> #define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO
>
>
>
> void die( const char* msg)
> {
> qDebug() << msg ;
> }
>
> int main(int argc, char *argv[])
> {
> QApplication app(argc, argv);
> const char* input_filename=argv[1];
>
> static int driver;
> static ao_device *audio_device;
> int i;
> int stream_id=-1;
> av_register_all();
> avcodec_register_all();
> AVFormatContext* container=NULL;
> AVStream* audioStream=NULL;
> //container=avformat_alloc_context();
>
> if(avformat_open_input(&container,input_filename,NULL,NULL)<0){
> die("Could not open file");
> }
> else
> die("File Opend");
>
>
> if(avformat_find_stream_info(container,NULL)<0){
> die("Could not find file info");
> }
>
>
> av_dump_format(container,0,input_filename,false);
> for(i=0; i < container->nb_streams; i++){
>
> if(container->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){
> stream_id=i;
> audioStream=container->streams[i];
>
> qWarning() <<"audioStream"<<audioStream;
> qWarning() <<"Stream id:"<<stream_id;
> break;
> }
> }
>
> if(stream_id==-1){
> die("Could not find Audio Stream");
> }
>
>
> AVCodecContext *ctx=container->streams[stream_id]->codec;
> qWarning() <<"Codec ptr:"<< ctx;
> AVCodec *codec=avcodec_find_decoder(ctx->codec_id);
> if(codec==NULL){
> die("cannot find codec!");
> }
>
> if(avcodec_open2(ctx,codec,NULL)<0){
> die("Codec cannot be opended!");
> }
> else
> qWarning()<<"Codec Opened";
>
>
> ao_initialize();
> driver = ao_default_driver_id();
> qWarning()<<"DRIVER ID" <<driver;
> ao_sample_format sformat;
> AVPacket dummy_packet;
> av_read_frame(container,&dummy_packet);
> AVSampleFormat sfmt=ctx->sample_fmt;
> //assign device sample rate depend on the input stream
>
> qWarning()<<"Sample format"<<sfmt;
>
> if(sfmt==AV_SAMPLE_FMT_U8){
> sformat.bits=8;
> qWarning()<<"Sample format"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_S16){
> sformat.bits=16;
> qWarning()<<"Sample format"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_S32){
> sformat.bits=32;
> qWarning()<<"Sample format:AV_SAMPLE_FMT_S32"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_FLT){
> sformat.bits=32;
> qWarning()<<"Sample format:AV_SAMPLE_FMT_FLT"<<sformat.bits;
> else if(sfmt==AV_SAMPLE_FMT_DBL){
> sformat.bits=64;
> qWarning()<<"Sample format"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_U8P){
> sformat.bits=8;
> qWarning()<<"Sample format"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_S16P){
> sformat.bits=16;
> qWarning()<<"Sample format"<<sformat.bits;
> }
>
> else if(sfmt==AV_SAMPLE_FMT_S32P){
> sformat.bits=32;
> qWarning()<<"Sample format:AV_SAMPLE_FMT_S32P"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_FLTP){
> sformat.bits=32;
> qWarning()<<"Sample format:AV_SAMPLE_FMT_FLTP"<<sformat.bits;
> }
> else if(sfmt==AV_SAMPLE_FMT_DBLP){
> sformat.bits=64;
> qWarning()<<"Sample format"<<sformat.bits;
> }
>
>
> sformat.channels=ctx->channels;
>
> //sformat.channels=2;
> qWarning()<<"Sample format channels"<<sformat.channels;
>
> sformat.rate=ctx->sample_rate;
> qWarning()<<"Sample format rate"<<sformat.rate;
>
> sformat.byte_format=AO_FMT_NATIVE;
> qWarning()<<"Sample format "<<sformat.byte_format;
> sformat.matrix=0;
>
> //seek back to the beginning of stream
> av_seek_frame(container,stream_id,0,AVSEEK_FLAG_ANY);
>
> audio_device=ao_open_live(driver,&sformat,NULL);
> //end of init AO LIB
>
> //data packet read from the stream
> AVPacket packet;
> av_init_packet(&packet);
>
> int buffer_size=AVCODEC_MAX_AUDIO_FRAME_SIZE+
> FF_INPUT_BUFFER_PADDING_SIZE;;
>
> qWarning()<<"buffersize "<<buffer_size;
> uint8_t buffer[buffer_size];
> packet.data=buffer;
> packet.size =buffer_size;
>
> //frame ,where the decoded data will be written
> AVFrame *frame=avcodec_alloc_frame();
> int len;
> int frameFinished=0;
>
> qWarning()<<"CODEC"<<audioStream->codec;
> while(av_read_frame(container,&packet)>=0)
> {
> // qWarning()<<audioStream->index;
> if(packet.stream_index==audioStream->index){
> len=avcodec_decode_audio4(ctx,frame,&frameFinished,&packet);
> qWarning()<<"Enterd if loop";
> // qWarning() <<len;
> if(frameFinished){
> //play the decoded byteis
> qWarning()<<"PLAYING";
> ao_play(audio_device,
> (char*)frame->extended_data[0],frame->linesize[0] );
> }else{
> }
> }
> avformat_close_input(&container);
> ao_shutdown();
> return app.exec();
> }
>
> ----------------------------------------------------------------------------------------------------------------------------------
> My output
> --------------------------------------------------------------------------------------------------------------------
> File Opend
> Input #0, ogg, from '/home/tel/Downloads/desktop-login.ogg':
> Duration: 00:00:07.72, start: 0.000000, bitrate: 108 kb/s
> Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp, 112 kb/s
> audioStream 0x88b3f20
> Stream id: 0
> Codec ptr: 0x88b4100
> Codec Opened
> DRIVER ID 1
> Sample format 3
> Sample format:AV_SAMPLE_FMT_FLT 32
> Sample format channels 0
> Sample format rate 0
> Sample format 4
> buffersize 192008
> CODEC 0x88b4100
>
>
>
> --------------------------------------------------------------------------------------------------------------
> Regards,
> Anitha Susan Varghese
>
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
More information about the ffmpeg-user
mailing list