<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Jan 24, 2017 11:45 AM, "Cesareo Fernandez" <<a href="mailto:cesareof@gmail.com">cesareof@gmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the quick reply. <div><br></div><div>I open the file and allocate out_buffer each time because this is just a snippet of code that I slapped together to show the basic process I am attempting, I will be sending stream of audio frames in a websocket to be played back on a webpage in practice. I am writing to a file now just to test whether or not I can decode a frame of audio and get it to playback in a file. A task that is proving difficult enough. I am not really sure how to work with audio though. I tested your suggestion and it produces no better results:</div><div><br></div><div><div class="quoted-text"><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>uint8_t *out_buffer = (uint8_t *)av_malloc(MAX_AUDIO_FRAME_<wbr>SIZE*2);</div></div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int data_size = swr_convert(au_convert_ctx,&<wbr>out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>fwrite(out_buffer, 1, data_size, fOut);<span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div></div><div><br></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">This is the file I am testing this function against:</span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap"><br></span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">ffmpeg.exe -i \\Handel.mp3</span><span style="white-space:pre-wrap"><br></span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"><div>[mp3 @ 027dda40] Estimating duration from bitrate, this may be inaccurate</div><div>Input #0, mp3, from '\\Handel.mp3':</div><div> Metadata:</div><div> artist : Quinn String Quartet</div><div> album : Israeli Concertino</div><div> genre : Classical</div><div> Duration: 00:00:51.55, start: 0.000000, bitrate: 127 kb/s</div><div> Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s</div><div>At least one output file must be specified</div><div><br></div></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap"><br></span></span></div><div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap">When I inspect the resulting pcm after decoding file via ffmpeg.exe -i <fOut></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"><br></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap">I see a lot of this:</span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Dependent coupling is not supported together with LTP
Last message repeated 35 times</span><br></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Invalid Predictor Reset Group. </span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Pulse data corrupt or invalid. </span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Reserved bit set. </span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Input buffer exhausted before END element found </span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">[aac @ 002e77e0] Reserved bit set. </span></span></div><div><span class="m_8712162536768494360gmail-Apple-tab-span"><span style="white-space:pre-wrap">Last message repeated 3 times </span><br></span></div></div><div><span class="m_8712162536768494360gmail-Apple-tab-span" style="white-space:pre-wrap"><div>[aac @ 0440da40] Estimating duration from bitrate, this may be inaccurate</div><div>[aac @ 0440da40] Could not find codec parameters for stream 0 (Audio: aac, 4.0,</div><div>fltp, 1535 kb/s): unspecified sample rate</div><div>Consider increasing the value for the 'analyzeduration' and 'probesize' options</div><div>\\audio_out.pcm: could not find codec parameters</div><div>Input #0, aac, from '\\audio_out.pcm':</div><div> Duration: 00:00:11.94, bitrate: 1535 kb/s</div><div> Stream #0:0: Audio: aac, 4.0, fltp, 1535 kb/s</div><div>At least one output file must be specified</div><div><br></div><div><br></div></span></div></div><div class="elided-text"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 23, 2017 at 8:04 PM, Steve Myers <span dir="ltr"><<a href="mailto:musicspeedchanger@gmail.com" target="_blank">musicspeedchanger@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div><div class="m_8712162536768494360h5"><div>On Jan 23, 2017, at 5:38 PM, Cesareo Fernandez <<a href="mailto:cesareof@gmail.com" target="_blank">cesareof@gmail.com</a>> wrote:</div><br class="m_8712162536768494360m_-6353821109884138057Apple-interchange-newline"></div></div><div><div><div class="m_8712162536768494360h5"><div dir="ltr"><div>I have been attempting to use the ffmpeg libraries to take as input a RTMP stream consisting of a video stream and an audio stream, and decode the respective streams in order to push the contents out to a website via a websocket. The video portion of this task is complete and works fine without issue. Converting frames of h.264 video to single motion jpeg images and pushing those on without a problem. I am attempting to do something similar with audio, takes frames of aac audio and passing those out through a websocket to be played back in chunks, this portion of the task is proving to be a lot more difficult than I thought it would be. </div><div><br></div><div>The way I am testing this is simply learning the way to decode an encode audio (if necessary) to a file before trying to implement it practically via websockets and even this is proving more difficult than I expected, I found some examples via google, but I can't get any of these to work: </div><div> </div><div><br></div><div><div>int PullAudioFrames( char input[], char output[] )</div><div>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>const int MAX_AUDIO_FRAME_SIZE = 192000;</div><div> bool bRet = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bool bFileOpened = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bool bAudioCodecOpen = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bool abort = false;</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int nVideoStream = -1;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int nAudioStream = -1;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVDictionary *optionsDict = NULL;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//-- Register all formats and codecs and network tools</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avcodec_register_all();</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_register_all();<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avformat_network_init();</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//--</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVCodecContext *pIn_AudioCodecCtx = NULL;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVCodec *pIn_AudioCodec = NULL;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>struct SwrContext *au_convert_ctx;</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVFormatContext *pFormatCtx = avformat_alloc_context();</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(avformat_open_input(&pForma<wbr>tCtx, input, NULL, &optionsDict) == 0 )<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//Open Stream<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bFileOpened = true;<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(avformat_find_stream_info(p<wbr>FormatCtx, &optionsDict) >= 0 )<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//Get Stream information (video, audio, subtitle)</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>for(int i=0; i<(int)pFormatCtx->nb_streams; i++)<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//Find the video stream</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(pFormatCtx->streams[i]->cod<wbr>ecpar->codec_type==AVMEDIA_TYP<wbr>E_AUDIO)</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>nAudioStream=i;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( nAudioStream >= 0 ) </div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>break;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bool bCleanUp = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( nAudioStream >= 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>pIn_AudioCodec = avcodec_find_decoder( pFormatCtx->streams[nAudioStre<wbr>am]->codecpar->codec_id );</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(pIn_AudioCodec != NULL)</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>pIn_AudioCodecCtx = avcodec_alloc_context3(pIn_Aud<wbr>ioCodec);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>// Fill the codecCtx with the parameters of the codec used in the read file.</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( avcodec_parameters_to_context(<wbr>pIn_AudioCodecCtx, pFormatCtx->streams[nAudioStre<wbr>am]->codecpar) == 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( avcodec_open2(pIn_AudioCodecCt<wbr>x, pIn_AudioCodec, NULL) >= 0 )<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>//Open Audio codec<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bAudioCodecOpen = true;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bCleanUp = true;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bCleanUp = true;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( bCleanUp ) </div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avcodec_close( pIn_AudioCodecCtx );</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avcodec_free_context( &pIn_AudioCodecCtx );</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( bAudioCodecOpen )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>au_convert_ctx = swr_alloc();</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>au_convert_ctx=swr_alloc_set_o<wbr>pts(au_convert_ctx, AV_CH_LAYOUT_STEREO, AV_SAMPLE_FMT_S16, 44100, av_get_default_channel_layout(<wbr>pIn_AudioCodecCtx->channels), pIn_AudioCodecCtx->sample_fmt , pIn_AudioCodecCtx->sample_rate<wbr>,0, NULL);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>swr_init(au_convert_ctx);</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVFrame *pFrame=av_frame_alloc();</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVPacket packet;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_init_packet(&packet);</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>while( !abort ) </div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_packet_unref(&packet);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_frame_unref(pFrame);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int result = av_read_frame( pFormatCtx, &packet);<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( result < 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( result == AVERROR(EAGAIN) )<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>continue;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else if( result == AVERROR(EPIPE) )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf( "[\"Error\", {\"message\" : \"Unable to read Frame pipe error. [%d] [%d]\"}]", result, AVERROR(result) );<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else if (result == AVERROR_EOF)</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf( "[\"Error\", {\"message\" : \"Unable to read Frame end of File. [%d] [%d]\"}]", result, AVERROR(result) );</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf( "[\"Error\", {\"message\" : \"Unable to read Frame. [%d] [%d]\"}] ", result, AVERROR(result) );</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>abort = true;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> </div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(packet.stream_index==nAudio<wbr>Stream)<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int frameFinished=0;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int nResult = avcodec_send_packet(pIn_AudioC<wbr>odecCtx, &packet);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( nResult == 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>nResult = avcodec_receive_frame( pIn_AudioCodecCtx, pFrame );</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( nResult == 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>uint8_t *out_buffer = (uint8_t *)av_malloc(MAX_AUDIO_FRAME_SI<wbr>ZE*2);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int data_size = av_samples_get_buffer_size(NUL<wbr>L, pIn_AudioCodecCtx->channels, pFrame->nb_samples, pIn_AudioCodecCtx->sample_fmt, 1);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>swr_convert(au_convert_ctx,&ou<wbr>t_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>FILE *fOut;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( fopen_s( &fOut, output, "a+" ) == 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>fwrite(out_buffer, 1, data_size, fOut);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>fclose(fOut);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_packet_unref(&packet);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>av_frame_free(&pFrame);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else </div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf( "Unable to open Codec in %s", input );<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf( "No stream information found in %s", input );<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>else</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>printf("Unable to open live video stream %s", input );</div><div><br></div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( bAudioCodecOpen )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avcodec_close(pIn_AudioCodecCt<wbr>x);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avcodec_free_context(&pIn_Audi<wbr>oCodecCtx);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>swr_free(&au_convert_ctx);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bAudioCodecOpen = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if(bFileOpened)</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( pFormatCtx )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>avformat_close_input(&pFormatC<wbr>tx);<span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>bFileOpened = false;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>return 0;</div><div>}</div></div><div><br></div><div><br></div><div>The resulting file is not playable and passing it back through CLI ffmpeg.exe doesn't give a whole lot of useful information why that is. Any help, or point in the right direction would be greatly appreciated. </div><div><br></div><div><br></div></div></div></div>
______________________________<wbr>_________________<br>Libav-user mailing list<br><a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br><a href="http://ffmpeg.org/mailman/listinfo/libav-user" target="_blank">http://ffmpeg.org/mailman/list<wbr>info/libav-user</a><br></div></blockquote><br></div><div><span><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>uint8_t *out_buffer = (uint8_t *)av_malloc(MAX_AUDIO_FRAME_SI<wbr>ZE*2);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>int data_size = av_samples_get_buffer_size(NUL<wbr>L, pIn_AudioCodecCtx->channels, pFrame->nb_samples, pIn_AudioCodecCtx->sample_fmt, 1);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>swr_convert(au_convert_ctx,&ou<wbr>t_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><br></div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>FILE *fOut;</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>if( fopen_s( &fOut, output, "a+" ) == 0 )</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>{</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>fwrite(out_buffer, 1, data_size, fOut);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>fclose(fOut);</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>}</div><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div></span><div><span class="m_8712162536768494360m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">This looks wrong, you should be using the return of swr_convert to base the number of bytes to write. Also, why allocate out_buffer, and open and close the file on every frame?</span></div></div><br></div><br>______________________________<wbr>_________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">http://ffmpeg.org/mailman/list<wbr>info/libav-user</a><br>
<br></blockquote></div><br></div>
</div><br>______________________________<wbr>_________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br>
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">http://ffmpeg.org/mailman/<wbr>listinfo/libav-user</a><br></blockquote></div><br></div></div><div class="gmail_extra" dir="auto">You are writing a data_size number of bytes but swr_convert returns a number of samples. Look at the examples, resampling_audio has it.</div></div>