<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><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>uint8_t *out_buffer = (uint8_t *)av_malloc(MAX_AUDIO_FRAME_SIZE*2);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                    </span>int data_size = swr_convert(au_convert_ctx,&out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                   </span>fwrite(out_buffer, 1, data_size, fOut);<span class="gmail-Apple-tab-span" style="white-space:pre">               </span></div></div><div><br></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">This is the file I am testing this function against:</span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre"><br></span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">ffmpeg.exe -i \\Handel.mp3</span><span style="white-space:pre"><br></span></span></div><div><span class="gmail-Apple-tab-span" style="white-space:pre"><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="gmail-Apple-tab-span"><span style="white-space:pre"><br></span></span></div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre">When I inspect the resulting pcm after decoding file via ffmpeg.exe -i <fOut></span></div><div><span class="gmail-Apple-tab-span" style="white-space:pre"><br></span></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">I see a lot of this:</span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Dependent coupling is not supported together with LTP
Last message repeated 35 times</span><br></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Invalid Predictor Reset Group.                     </span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Pulse data corrupt or invalid.                      </span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Reserved bit set.                                   </span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Input buffer exhausted before END element found     </span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">[aac @ 002e77e0] Reserved bit set.                                       </span></span></div><div><span class="gmail-Apple-tab-span"><span style="white-space:pre">Last message repeated 3 times                                    </span><br></span></div></div><div><span class="gmail-Apple-tab-span" style="white-space:pre"><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="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="h5"><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_-6353821109884138057Apple-interchange-newline"></div></div><div><div><div class="h5"><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_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>bool bFileOpened = false;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>bool bAudioCodecOpen = false;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>bool abort = false;</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>int nVideoStream = -1;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>int nAudioStream = -1;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>AVDictionary *optionsDict = NULL;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">   </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>//-- Register all formats and codecs and network tools</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>avcodec_register_all();</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>av_register_all();<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                                                                                 </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>avformat_network_init();</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>//--</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>AVCodecContext *pIn_AudioCodecCtx = NULL;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>AVCodec *pIn_AudioCodec = NULL;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>struct SwrContext *au_convert_ctx;</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>AVFormatContext *pFormatCtx = avformat_alloc_context();</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>if(avformat_open_input(&<wbr>pFormatCtx, input, NULL, &optionsDict) == 0 )<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>//Open Stream<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                      </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>bFileOpened = true;<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">        </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>if(avformat_find_stream_info(<wbr>pFormatCtx, &optionsDict) >= 0 )<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                    </span>//Get Stream information (video, audio, subtitle)</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>for(int i=0; i<(int)pFormatCtx->nb_streams; i++)<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                     </span>//Find the video stream</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                     </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>if(pFormatCtx->streams[i]-><wbr>codecpar->codec_type==AVMEDIA_<wbr>TYPE_AUDIO)</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                 </span>nAudioStream=i;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                            </span>if( nAudioStream >= 0 ) </div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                        </span>break;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                      </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>bool bCleanUp = false;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                      </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                    </span>if( nAudioStream >= 0 )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                  </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>pIn_AudioCodec = avcodec_find_decoder( pFormatCtx->streams[<wbr>nAudioStream]->codecpar-><wbr>codec_id );</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                              </span>if(pIn_AudioCodec  != NULL)</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>pIn_AudioCodecCtx = avcodec_alloc_context3(pIn_<wbr>AudioCodec);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">              </span></div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                        </span>if( avcodec_parameters_to_context(<wbr>pIn_AudioCodecCtx, pFormatCtx->streams[<wbr>nAudioStream]->codecpar) == 0  )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                      </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>if( avcodec_open2(pIn_<wbr>AudioCodecCtx, pIn_AudioCodec, NULL) >= 0 )<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>//Open Audio codec<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap"> </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                    </span>bAudioCodecOpen = true;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                             </span>else</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                        </span>bCleanUp = true;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                    </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>else</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                </span>bCleanUp = true;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                            </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>if( bCleanUp ) </div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                    </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>avcodec_close( pIn_AudioCodecCtx );</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                         </span>avcodec_free_context( &pIn_AudioCodecCtx );</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                     </span>}</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                  </span>if( bAudioCodecOpen )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                       </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>au_convert_ctx = swr_alloc();</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                               </span>au_convert_ctx=swr_alloc_set_<wbr>opts(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_<wbr>rate,0, NULL);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                             </span>swr_init(au_convert_ctx);</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                          </span>AVFrame *pFrame=av_frame_alloc();</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>AVPacket packet;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                            </span>av_init_packet(&packet);</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                               </span>while( !abort ) </div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>av_packet_unref(&packet);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                       </span>av_frame_unref(pFrame);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                     </span>int result = av_read_frame( pFormatCtx, &packet);<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                      </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                    </span>if( result < 0 )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                 </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>if( result == AVERROR(EAGAIN) )<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                                            </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                    </span>continue;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>else if( result == AVERROR(EPIPE) )</div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                          </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                            </span>else if (result == AVERROR_EOF)</div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                          </span>else</div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                             </span>abort = true;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                       </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>else</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                        </span>{<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span> </div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                          </span>if(packet.stream_index==<wbr>nAudioStream)<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">   </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                            </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                   </span>int frameFinished=0;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                        </span>int nResult = avcodec_send_packet(pIn_<wbr>AudioCodecCtx, &packet);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                       </span>if( nResult == 0 )</div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                      </span>if( nResult == 0 )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                  </span>{</div><div><span class="m_-6353821109884138057gmail-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><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                              </span>int data_size = av_samples_get_buffer_size(<wbr>NULL, pIn_AudioCodecCtx->channels, pFrame->nb_samples, pIn_AudioCodecCtx->sample_fmt, 1);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>swr_convert(au_convert_ctx,&<wbr>out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>FILE *fOut;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                         </span>if( fopen_s( &fOut, output, "a+" ) == 0 )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                             </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                   </span>fwrite(out_buffer, 1, data_size, fOut);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                     </span>fclose(fOut);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                               </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                   </span>}<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                            </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>av_packet_unref(&packet);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                               </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                           </span>av_frame_free(&pFrame);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                 </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>else </div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                              </span>printf( "Unable to open Codec in %s", input );<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>else</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                        </span>printf( "No stream information found in %s", input );<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>else</div><div><span class="m_-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_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>if( bAudioCodecOpen )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>avcodec_close(pIn_<wbr>AudioCodecCtx);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                </span>avcodec_free_context(&pIn_<wbr>AudioCodecCtx);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>swr_free(&au_convert_ctx);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>bAudioCodecOpen  = false;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>}</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>if(bFileOpened)</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span>if( pFormatCtx )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                    </span>avformat_close_input(&<wbr>pFormatCtx);<span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">  </span></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>bFileOpened = false;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>}</div><div><span class="m_-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/<wbr>listinfo/libav-user</a><br></div></blockquote><br></div><div><span class=""><div><span class="m_-6353821109884138057gmail-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><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                              </span>int data_size = av_samples_get_buffer_size(<wbr>NULL, pIn_AudioCodecCtx->channels, pFrame->nb_samples, pIn_AudioCodecCtx->sample_fmt, 1);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>swr_convert(au_convert_ctx,&<wbr>out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);</div><div><br></div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>FILE *fOut;</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                         </span>if( fopen_s( &fOut, output, "a+" ) == 0 )</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                             </span>{</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                   </span>fwrite(out_buffer, 1, data_size, fOut);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                                     </span>fclose(fOut);</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">                                                               </span>}</div><div><span class="m_-6353821109884138057gmail-Apple-tab-span" style="white-space:pre-wrap">           </span></div></span><div><span class="m_-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">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>
<br></blockquote></div><br></div>