<div dir="ltr">I am attempting to take a live audio stream of AAC and break up the input into short 2 -> 3 second files. <div><br></div><div><div><br></div><div>bool ConvertAudioFrames( AVPacket packetList[], int &nBufferCntr, AVCodecContext* InCodecCtx  )</div><div>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>bool bRet = false;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>int nSize = 0;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>AVPacket intermPacket;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>av_init_packet(&intermPacket);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>intermPacket.data = NULL;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>intermPacket.size= 0;</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>AVCodec *pOutCodec=avcodec_find_encoder(AV_CODEC_ID_MP2);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>AVCodecContext *pOutCtx = avcodec_alloc_context3(pOutCodec);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>if( pOutCtx )</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>pOutCtx->bit_rate = 64000; </div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>pOutCtx->sample_rate = select_sample_rate(pOutCodec);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>pOutCtx->sample_fmt = AV_SAMPLE_FMT_S16;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>pOutCtx->channels = InCodecCtx->channels;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>pOutCtx->channel_layout = InCodecCtx->channel_layout;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>pOutCtx->time_base.den = InCodecCtx->time_base.den;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>pOutCtx->time_base.den = InCodecCtx->sample_rate;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>pOutCtx->time_base.num = 1;</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>int codecret = avcodec_open2( pOutCtx, pOutCodec, NULL );</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>if( pOutCodec && (codecret >= 0) )</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">          </span>{<span class="gmail-Apple-tab-span" style="white-space:pre">                     </span></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>int encoded = 0;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>FILE *f;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>fopen_s( &f, "\\audio_out.mp2", "ab");</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>for( int i = 0; i < nBufferCntr; i++ ) </div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                    </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                              </span>AVFrame *decodedFrame = av_frame_alloc();</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                              </span>av_frame_unref(decodedFrame);</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                         </span>int frameFinished=0;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                           </span>int nResult = avcodec_send_packet(InCodecCtx, &packetList[i]);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                             </span>if( nResult == 0 )</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                     </span>nResult = avcodec_receive_frame(InCodecCtx, decodedFrame );</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                           </span>if( nResult == 0 )</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                             </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                      </span>if (avcodec_send_frame(pOutCtx, decodedFrame) == 0)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                    </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                              </span>while (avcodec_receive_packet(pOutCtx, &intermPacket) == 0)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                      </span>fwrite( intermPacket.data, 1, intermPacket.size, f);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                   </span>av_packet_unref( &intermPacket );</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                  </span>bRet = true;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                           </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                      </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                              </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                      </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                      </span>fclose(f);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>avcodec_close( pOutCtx );</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>avcodec_free_context( &pOutCtx );</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>}</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>return bRet;</div><div>} </div></div><div><br></div><div>The goal would be to take the resulting converted file and send it through a websocket to a page for playback via webAudio API, but in this code example I am simply trying to write the resulting encoded packets to a file. This does not work. What am I doing wrong? The answer to that is probably plenty, but specifically how can I convert this AVPacket packetList[] to a playable file?</div><div><br></div><div><br></div><div><br></div><div><br></div></div>