{"id":1006,"date":"2009-08-05T08:48:46","date_gmt":"2009-08-05T06:48:46","guid":{"rendered":"https:\/\/alax.info\/blog\/?p=1006"},"modified":"2010-03-26T23:40:26","modified_gmt":"2010-03-26T21:40:26","slug":"mediatools-how-to-manually-configure-filters-to-render-m-jpeg-video-stream-from-an-ip-camera","status":"publish","type":"post","link":"https:\/\/alax.info\/blog\/1006","title":{"rendered":"MediaTools: How to manually configure filters to render M-JPEG video stream from an IP camera"},"content":{"rendered":"<p><a href=\"https:\/\/alax.info\/blog\/category\/utilities\/media-tools\">Media Tools<\/a> DirectShow Filters can be used to acquire, parse and decoder M-JPEG encoded video stream from an IP camera or a video server, however for a quick start it is necessary to properly register filters on system and create a DirectShow graph.<\/p>\n<p>To register the filters, it is necessary to download DLLs from <a href=\"http:\/\/code.assembla.com\/roatl-utilities\/subversion\/nodes\/trunk\/MediaTools\/_Bin\">repository<\/a>. While Acquisition.dll does not require special prerequisites installed, CodingI.dll is using <a href=\"http:\/\/software.intel.com\/en-us\/intel-ipp\/\">Intel Integrated Performance Primitives<\/a> (IPP) version 6.0.0 internally and requires its [at least] redistributables installed before DLLs are being registered using regsvr32.<\/p>\n<p>Intel went further with new releases of IPP, which are incompatible with the version used to build CodingI.dll, so it is version 6.0.0 (in downloads on  Intel website: version 6.0 build 0) has to be installed. Note that Intel DLLs from <em>C:\\Program Files\\Intel\\IPP\\6.0.0.044\\ia32\\bin<\/em> (version 6.0.0.062 is known to be also compatible) need to be on system search path, or copied to <em>C:\\Windows\\system32<\/em> directory.<\/p>\n<p>Once Intel IPP is prepared, it is required to register CodingI.dll using regsvr32. This registers filters and they are available in GraphEdit and for applications. It is important that on the way of constructing graph which renders video using standard video renderers it is required to specify correct resolution for video, or otherwise graph might fail to start with a message &#8220;The graph could not change state&#8221;, caused by video renderer failure to dynamically change to different (effective) resolution.<\/p>\n<p>To create rendering graph, add Alax.Info HTTP Stream Source Filter from the filter list and provide camera URL in properties, e.g. <a href=\"http:\/\/cam15001.miemasu.net\/nphMotionJPEG?Kind=1\">http:\/\/cam15001.miemasu.net\/nphMotionJPEG?Kind=1<\/a><\/p>\n<p><a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image001.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1007\" title=\"Adding Alax.Info HTTP Stream Source Filter\" src=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image001-320x151.png\" alt=\"Adding Alax.Info HTTP Stream Source Filter\" width=\"320\" height=\"151\" srcset=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image001-320x151.png 320w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image001-800x378.png 800w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image001.png 1427w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p><!--more-->Add more filters and provide proper resolution for video:<\/p>\n<p><a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image002.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1008\" title=\"Alax.Info JPEG Frame Decoder Filter\" src=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image002-320x151.png\" alt=\"Alax.Info JPEG Frame Decoder Filter\" width=\"320\" height=\"151\" srcset=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image002-320x151.png 320w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image002-800x378.png 800w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image002.png 1427w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Complete graph construction with resolution set up:<\/p>\n<p><a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image003.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1009\" title=\"Render Alax.Info JPEG Decoder Filter output pin\" src=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image003-320x151.png\" alt=\"Render Alax.Info JPEG Decoder Filter output pin\" width=\"320\" height=\"151\" srcset=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image003-320x151.png 320w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image003-800x378.png 800w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image003.png 1427w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Being run, the graph shows video:<\/p>\n<p><a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image004.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1010\" title=\"Video from cam15001.miemasu.net camera through Alax.Info DirectShow filters\" src=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image004-320x151.png\" alt=\"Video from cam15001.miemasu.net camera through Alax.Info DirectShow filters\" width=\"320\" height=\"151\" srcset=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image004-320x151.png 320w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image004-800x378.png 800w, https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/03-image004.png 1427w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Dynamic handling of resolution selection, configuration and change is also illustrated in sample application <a href=\"http:\/\/code.assembla.com\/roatl-utilities\/subversion\/nodes\/trunk\/MediaTools\/Samples\/RenderHttpMjpegVideo01\">RenderHttpMjpegVideo01<\/a>.<\/p>\n<p>NOTE: The constructed graph .GRF file is <a href=\"https:\/\/alax.info\/blog\/wp-content\/uploads\/2009\/08\/cam15001miemasunet.grf\">available for download<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Media Tools DirectShow Filters can be used to acquire, parse and decoder M-JPEG encoded video stream from an IP camera or a video server, however for a quick start it is necessary to properly register filters on system and create a DirectShow graph. To register the filters, it is necessary to download DLLs from repository.&hellip; <\/p>\n<p><a class=\"moretag\" href=\"https:\/\/alax.info\/blog\/1006\">Read the full article<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[159,12,10],"tags":[82,78,47,75,158,239,137,486],"class_list":["post-1006","post","type-post","status-publish","format-standard","hentry","category-media-tools","category-technology","category-video","tag-camera","tag-directshow","tag-howto","tag-jpeg","tag-m-jpeg","tag-mediatools","tag-sample","tag-video"],"_links":{"self":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts\/1006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/comments?post=1006"}],"version-history":[{"count":0,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/posts\/1006\/revisions"}],"wp:attachment":[{"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/media?parent=1006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/categories?post=1006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alax.info\/blog\/wp-json\/wp\/v2\/tags?post=1006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}