<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>I have a libav based player library. Using AVDictionary options, set via av_dict_set() and ultimately passed to av_format_open_input(), the library handles playing video files, USB cameras, or IP streams. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Using the following AVDictionary setup, the library has been able to handle pretty much every IP camera tried, until we encountered a client with <i>several hundred</i> very old Verint cameras.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set(&mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"threads"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"auto"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"refcounted_frames"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"1"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );           <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"sync"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"video"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );      <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"fflags"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"discardcorrupt"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );   </span><span style='font-size:8.0pt;font-family:"Courier New"'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New"'>  <span style='color:black'>av_dict_set( &mp_opts, </span><span style='color:#A31515'>"max_delay"</span><span style='color:black'>, </span><span style='color:#A31515'>"100000"</span><span style='color:black'>, 0 );<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'> </span><span style='font-size:8.0pt;font-family:"Courier New";color:green'>// av_dict_set( &mp_opts, "fflags", "nobuffer", 0 );</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:green'> // av_dict_set( &mp_opts, "flags", "low_delay", 0 );</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'> // av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"rtsp_transport"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"tcp"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );    <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"framerate"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"29.97"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"analyzeduration"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"1000000"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:8.0pt;font-family:"Courier New";color:black'>  av_dict_set( &mp_opts, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"allowed_media_types"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, </span><span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'>"video"</span><span style='font-size:8.0pt;font-family:"Courier New";color:black'>, 0 );</span><span style='font-size:8.0pt;font-family:"Courier New"'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The very old (20 years?) Verint cameras have a maximum resolution of D1 (720x480), while offering resolutions of CIF, 2CIF and D1, in either h264 or mjpeg stream formats. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The h264 stream will play in VLC. With VLC logging set to debug, it looks like VLC attempts and fails 16 + 26 + 27 + 13 different h264 wrappers before figuring out through (maybe?) emulated DirectX9 hardware a stream header for 720x480. Playing and expecting 720x480, a Dx9 message says a resolution change occurs setting the stream to 720x540 resolution frames. That’s the frame size VLC ultimately displays.  <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Trying ffprobe on the rtsp stream, it finds the 720x480 header. But there is no mention of a framebuffer resolution change. I know libav and my library link with the DirectX libraries, as that’s how I get USB stream support. Yet, I’m not familiar with how to handle dynamic resolution changes. This resolution change occurs before the first frame, so maybe that’s just how this old rtsp codec conventionally worked? <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Are there some additional AVDictionary options necessary to get recognition of such an old D1 resolution h264 codec? <o:p></o:p></p><p class=MsoNormal>And is there some additional callback or metadata capture for identifying a dynamic resolution change? <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>-Sincerely,<o:p></o:p></p><p class=MsoNormal>Bsenftner<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>