<div dir="ltr"><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">I am trying to demux live HLS audio and find delays in the loop for reading frames whenever it starts reading the next segment file.  </div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">The HLS audio segment files are MP3, 1 second target duration.  Each 1 second file has 13 frames.</div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">The live HLS source and our code is started at the same time.  avformat_open_input takes about 5 seconds to return, as it waits for 3 segment files as required by HLS standards.</div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">The av_read_frame loop reads 13 frames from each segment file and then it takes about 1.5 to 2 seconds before it starts reading the next 13 frames from the next segment file.  Our interrupt callback is called several times within this duration and we return a 0 to continue reading. </div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">The playlist has several segment files available for it to read so it is not waiting for the segment file to be available in the playlist.</div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">Given below is the code snippet and attached is the m3u8.<br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default"><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394">static int interrupt_cb(void *start_ticks) </font></div><div class="gmail_default"><font color="#0b5394">{ </font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>long starttime = (long)start_ticks;  //the start time ticks is in opaque</font></div><div class="gmail_default"><font color="#0b5394"> </font></div><div class="gmail_default"><font color="#0b5394">        //timeout after 5 seconds of no activity</font></div><div class="gmail_default"><font color="#0b5394">        if (GetTickCount() - starttime  >7000))</font></div><div class="gmail_default"><font color="#0b5394">                return 1;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>log("Returning 0");</font></div><div class="gmail_default"><font color="#0b5394">        return 0;</font></div><div class="gmail_default"><font color="#0b5394">} </font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394">static bool hls_demuxer( char* fileName )</font></div><div class="gmail_default"><font color="#0b5394">{</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>AVDictionary *options = NULL;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>av_dict_set(&options, "analyzeduration", "100000", 0);</font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>AVFormatContext* formatContext = avformat_alloc_context( );</font></div><div class="gmail_default"><span class="gmail-Apple-tab-span" style="white-space:pre"><font color="#0b5394">                 </font></span></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>formatContext->interrupt_callback.callback = interrupt_cb;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>long startticks = GetTickCount();</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>formatContext->interrupt_callback.opaque = (void*) startticks;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>formatContext->flags|=AVFMT_FLAG_NONBLOCK;</font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394">//added the following additional parameters to see if they would help to speed up reading frames - but in vain</font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>formatContext->probesize = 2048;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>formatContext->max_delay = 100000; //0.1 secs, default 5 secs</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>formatContext->probe_score = 100;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>formatContext->max_analyze_duration = 100000;<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>//0.1 secs</font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>if ( avformat_open_input( &formatContext, fileName, NULL, NULL ) !=0 )</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>{</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">           </span>return false;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>}</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>av_dict_free(&options);</font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><br></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>av_dump_format(formatContext,0,filename,0);<span class="gmail-Apple-tab-span" style="white-space:pre">                           </span>---------------------------- reaches here after 4 secs of start. Interrupt callback called several times.  This is OK.</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>if (avformat_find_stream_info(formatContext,NULL) != 0)</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>return false;</font></div><div class="gmail_default"><span class="gmail-Apple-tab-span" style="white-space:pre"><font color="#0b5394">       </font></span></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>AVPacket pkt;</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>while(!threadstop)</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>{<span class="gmail-Apple-tab-span" style="white-space:pre">     </span></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>startticks = GetTickCount();</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if (av_read_frame(formatContext,&pkt) != 0)<span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>-----------------------------reads 13 frames from first segment file. No interrupt callback.  Then before using the next segment file, calls interrupt </font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">                   </span>return false;<span class="gmail-Apple-tab-span" style="white-space:pre">                                         </span>-----------------------------callback several times (about 1 to 2 secs) before reading next segment file, then reads the next 13 frames.  Playlist</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                         </span>-----------------------------has several files available.</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">           </span>log("Packet read");</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>//Do something with packet</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">          </span>av_packet_unref(&pkt);<span class="gmail-Apple-tab-span" style="white-space:pre">                                            </span></font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>}</font></div><div class="gmail_default"><font color="#0b5394"><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>return true;<span class="gmail-Apple-tab-span" style="white-space:pre">                                                          </span>----------------------------When the playlist ends, it has 38 files.  The demuxer takes over 30 seconds longer.</font></div><div class="gmail_default"><font color="#0b5394">}</font></div></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">Any suggestions ?  Thanks in advance.</div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div class="gmail_default" style="color:rgb(11,83,148)">Debendra Modi</div><div class="gmail_default" style="color:rgb(11,83,148)"><br></div><div><div></div></div>
</div>