<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Hi, I am trying to write a mpeg player for iOS, for some reason, same code that calls "av_read_frame" has different result on Windows and iOS. after calling "av_read_frame", "stream_index" field inside "</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px">AVPacket" has non-zero value in iOS whereas on Windows it is always 0, when trying to play same stream.</span><div style="font-family:arial,sans-serif;font-size:13px">
The code snipper is following:</div><div style="font-family:arial,sans-serif;font-size:13px">       // header file</div><p style="font-family:arial,sans-serif;font-size:13px">        class LibavDecoder</p><p style="font-family:arial,sans-serif;font-size:13px">
        {</p><p style="font-family:arial,sans-serif;font-size:13px">                ..........</p><p style="font-family:arial,sans-serif;font-size:13px">                 AVFormatContext                         *avFormatContextPtr;</p>
<p style="font-family:arial,sans-serif;font-size:13px">                 AVPacket                                avpkt; </p><p style="font-family:arial,sans-serif;font-size:13px">        }</p><p style="font-family:arial,sans-serif;font-size:13px">
       // cpp file</p><p style="font-family:arial,sans-serif;font-size:13px"></p><p style="font-family:arial,sans-serif;font-size:13px">void                LibavDecoder::initStreams             (AVFormatContext *avFormatContextPtr)</p>
<p style="font-family:arial,sans-serif;font-size:13px">{</p><p style="font-family:arial,sans-serif;font-size:13px">    AVStream      *tempStream   = NULL;</p><p style="font-family:arial,sans-serif;font-size:13px">    AVCodec       *tempCodec    = NULL;</p>
<p style="font-family:arial,sans-serif;font-size:13px">    StreamConfig  tempConfig;</p><p style="font-family:arial,sans-serif;font-size:13px"><br></p><p style="font-family:arial,sans-serif;font-size:13px">    for (size_t streamcnt = 0; streamcnt < avFormatContextPtr->nb_streams; ++streamcnt)</p>
<p style="font-family:arial,sans-serif;font-size:13px">    {</p><p style="font-family:arial,sans-serif;font-size:13px">        tempStream = avFormatContextPtr->streams[streamcnt];</p><p style="font-family:arial,sans-serif;font-size:13px">
<br></p><p style="font-family:arial,sans-serif;font-size:13px">        if ((tempStream->codec->codec_type == AVMEDIA_TYPE_VIDEO) ||</p><p style="font-family:arial,sans-serif;font-size:13px">            (tempStream->codec->codec_type == AVMEDIA_TYPE_AUDIO))</p>
<p style="font-family:arial,sans-serif;font-size:13px">        {</p><p style="font-family:arial,sans-serif;font-size:13px">            tempConfig.stream         = tempStream;</p><p style="font-family:arial,sans-serif;font-size:13px">
            tempCodec                 = avcodec_find_decoder(tempStream->codec->codec_id);</p><p style="font-family:arial,sans-serif;font-size:13px">            tempConfig.codecContext   = tempStream->codec;</p><p style="font-family:arial,sans-serif;font-size:13px">
            tempConfig.frameCnt       = 0;</p><p style="font-family:arial,sans-serif;font-size:13px"><br></p><p style="font-family:arial,sans-serif;font-size:13px">            avcodec_open2(tempConfig.codecContext, tempCodec, NULL);</p>
<p style="font-family:arial,sans-serif;font-size:13px">            this->streamconfigs.push_back(tempConfig);</p><p style="font-family:arial,sans-serif;font-size:13px">        }</p><p style="font-family:arial,sans-serif;font-size:13px">
    }</p><p style="font-family:arial,sans-serif;font-size:13px">}</p><p style="font-family:arial,sans-serif;font-size:13px"></p><p style="font-family:arial,sans-serif;font-size:13px">StreamConfig*       LibavDecoder::getNextFrame            (AVFormatContext* avFormatContextPtr, AVPacket* avpkt)</p>
<p style="font-family:arial,sans-serif;font-size:13px">{</p><p style="font-family:arial,sans-serif;font-size:13px">    int           loop               = 1;</p><p style="font-family:arial,sans-serif;font-size:13px">    int           err                = 0;</p>
<p style="font-family:arial,sans-serif;font-size:13px">    size_t        configcnt          = 0;</p><p style="font-family:arial,sans-serif;font-size:13px">    StreamConfig  *tempConfig        = 0;</p><p style="font-family:arial,sans-serif;font-size:13px">
<br></p><p style="font-family:arial,sans-serif;font-size:13px"><br></p><p style="font-family:arial,sans-serif;font-size:13px">    while (loop == 1)</p><p style="font-family:arial,sans-serif;font-size:13px">    {</p><p style="font-family:arial,sans-serif;font-size:13px">
        err = <b>av_read_frame</b>(avFormatContextPtr, avpkt);</p><p style="font-family:arial,sans-serif;font-size:13px">        if (err < 0)</p><p style="font-family:arial,sans-serif;font-size:13px">        {</p><p style="font-family:arial,sans-serif;font-size:13px">
            if (err != -11) //Ressource not available, try again</p><p style="font-family:arial,sans-serif;font-size:13px">            {</p><p style="font-family:arial,sans-serif;font-size:13px">                if ((size_t)err != AVERROR_EOF)</p>
<p style="font-family:arial,sans-serif;font-size:13px">                {</p><p style="font-family:arial,sans-serif;font-size:13px">                    error("Error while av_read_frame", err);</p><p style="font-family:arial,sans-serif;font-size:13px">
                }</p><p style="font-family:arial,sans-serif;font-size:13px">                loop = 0;</p><p style="font-family:arial,sans-serif;font-size:13px">            }</p><p style="font-family:arial,sans-serif;font-size:13px">
        } else</p><p style="font-family:arial,sans-serif;font-size:13px">        {</p><p style="font-family:arial,sans-serif;font-size:13px">            configcnt = 0;</p><p style="font-family:arial,sans-serif;font-size:13px">
            while ((loop == 1) && (configcnt < this->streamconfigs.size()))</p><p style="font-family:arial,sans-serif;font-size:13px">            {</p><p style="font-family:arial,sans-serif;font-size:13px">                if (this-><a href="http://streamconfigs.at">streamconfigs.at</a>(configcnt).stream->index == <b>avpkt->stream_index</b>)<br>
</p><p style="font-family:arial,sans-serif;font-size:13px">                {</p><p style="font-family:arial,sans-serif;font-size:13px">                    tempConfig = &this-><a href="http://streamconfigs.at">streamconfigs.at</a>(configcnt);</p>
<p style="font-family:arial,sans-serif;font-size:13px">                    loop = 0;</p><p style="font-family:arial,sans-serif;font-size:13px">                }</p><p style="font-family:arial,sans-serif;font-size:13px">                configcnt++;</p>
<p style="font-family:arial,sans-serif;font-size:13px">            }</p><p style="font-family:arial,sans-serif;font-size:13px">        }</p><p style="font-family:arial,sans-serif;font-size:13px">        if (loop == 1)</p>
<p style="font-family:arial,sans-serif;font-size:13px">            av_free_packet(avpkt);</p><p style="font-family:arial,sans-serif;font-size:13px">    }</p><p style="font-family:arial,sans-serif;font-size:13px">    return tempConfig;</p>
<p style="font-family:arial,sans-serif;font-size:13px">}</p><p style="font-family:arial,sans-serif;font-size:13px"><br></p><p style="font-family:arial,sans-serif;font-size:13px">any ideas while this happens? Thanks a bunch in advance.</p>
</div>