<div dir="ltr">i have been trying to have a custom avio for write operations using ffmpeg/libav to write remuxed packets to a cache instead of a file or socket. read callbacks are working fine but write callback is never invoked. I followed example of <div><a href="https://gist.github.com/AlexVestin/15b90d72f51ff7521cd7ce4b70056dff">https://gist.github.com/AlexVestin/15b90d72f51ff7521cd7ce4b70056dff</a></div><div>but to no avail. My code is as shown below for write callback function:</div><div><br clear="all"><div>





<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">int</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> write_packet(</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">void</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> *opaque, </span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">uint8_t</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> *buf, </span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">int</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> buf_size) {</span></i></p>
<p class="gmail-p2" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><i><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"><span class="gmail-Apple-converted-space">    </span>cout << </span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">"in write_packet"</span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">;</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span>outfile.open(</span><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"segmentfile.ts"</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">, std::ios_base::app);</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">if</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">( !outfile ){</span></i></p>
<p class="gmail-p2" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32)"><i><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"><span class="gmail-Apple-converted-space">        </span></span></i><i><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">cout</span></i><i><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> << </span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">"Opening file failed"</span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> ;</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">                </span></span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">return</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> </span><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">0</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">;</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">        </span>}</i></span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span>outfile << (</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">uint8_t</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> *)bd->buf;</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><i><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">return</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> buf_size;</span></i></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><i>}</i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><br></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">and registration is via :</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><br></span></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space" style="">    </span>avio_ctx_buffer = (</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures;color:rgb(52,188,38)">uint8_t</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> *)av_malloc(avio_ctx_buffer_size);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">if</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> (!avio_ctx_buffer) {</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span>ret = AVERROR(</span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">ENOMEM</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span>exit(</span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">1</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>}</i></span></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span>avio_ctx = avio_alloc_context(avio_ctx_buffer, avio_ctx_buffer_size, </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">1</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">, &gbd, </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">NULL</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">, write_packet,</span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">NULL</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">if</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> (!avio_ctx) {</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span>ret = AVERROR(</span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">ENOMEM</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span>exit(</span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">1</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>}</i></span></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>m_ofmt_ctx = avformat_alloc_context();</i></span></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">     </span>AVOutputFormat* ofmt = av_guess_format(output_format_name.c_str(), </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">nullptr</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">, </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">nullptr</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">);</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">if</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">(!ofmt) {</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span></span></i><i style="color:rgb(195,55,32)"><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">cout</span></i><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> << </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">"Output format not found "</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> << output_format_name;</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><i><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(205,121,35)">return</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"> </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(195,55,32)">false</span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">;</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>}</i></span></p><p class="gmail-p2" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(195,55,32);background-color:rgb(255,255,255)"><i><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"><span class="gmail-Apple-converted-space">    </span></span></i><i><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">cout</span></i><i><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> << </span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">"Creating all output contexts successful"</span><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">;</span></i></p><p class="gmail-p1" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>m_ofmt_ctx->pb = avio_ctx;</i></span></p><p class="gmail-p3" style="margin:0px;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(82,48,225);background-color:rgb(255,255,255)"><i><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">//m_ofmt_ctx->flags |= AVFMT_FLAG_CUSTOM_IO;</span></i></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><i>
























</i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><span class="gmail-Apple-converted-space">    </span>m_ofmt_ctx->oformat = ofmt;</i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><br></i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><br></i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><i><br></i></span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font color="#000000" face="Menlo"><span style="font-size:11px;font-variant-ligatures:no-common-ligatures">I am thinking after this registration, any time there is a write function, like </span></font><span style="font-style:italic;color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">av_interleaved_write_frame()</span><i style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures"> , </i><font color="#000000" face="Menlo"><span style="font-size:11px;font-variant-ligatures:no-common-ligatures">the callback must be called.</span></font><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">But the call invocation is not happening. Is </span><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">there</span><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures"> something i need to do other than above </span><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">registration</span><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures"> to make write callback work?</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font color="#000000" face="Menlo"><span style="font-size:11px;font-variant-ligatures:no-common-ligatures"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font color="#000000" face="Menlo"><span style="font-size:11px;font-variant-ligatures:no-common-ligatures">I tried both having and removing "</span></font><i style="color:rgb(82,48,225);font-family:Menlo;font-size:11px"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">m_ofmt_ctx->flags |= AVFMT_FLAG_CUSTOM_IO;</span></i><span style="font-size:11px;font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0);font-family:Menlo">"</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><span style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">but neither works.</span><br></p>





</div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Regards<br>Manoj<br></div></div></div></div></div>