<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Open Source on Mi&amp;Bee Blog</title><link>/en/tags/open-source/</link><description>Recent content in Open Source on Mi&amp;Bee Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>蓝宝石的傻话</managingEditor><lastBuildDate>Fri, 05 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/open-source/rss.xml" rel="self" type="application/rss+xml"/><item><title>MiBeeNvr v0.6.0: Timelapse + Transcoding UI + ONVIF Enhancements + Documentation Restructure</title><link>/en/posts/mibee-oss/mibee-nvr-v0.6-promo/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/mibee-oss/mibee-nvr-v0.6-promo/</guid><description>&lt;p&gt;After running continuous recording for a few weeks, storage became the first bottleneck. A single 1080p camera writes tens of GB per day — with a 30-day retention policy, a 1TB硬盘 is mostly consumed. Many community members reported the same issue, and during discussions, the ideas of timelapse and transcoding storage gained the most traction: most of the time the画面 is static, and compressing it with timelapse requires only 5% of the space for the same duration.&lt;/p&gt;</description></item><item><title>MiBeeNvr v0.6.0's Test Machines: Three Camera Projects Updated in Sync</title><link>/en/posts/mibee-oss/camera-test-machines/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>/en/posts/mibee-oss/camera-test-machines/</guid><description>&lt;p&gt;The concurrently released &lt;a href="/en/posts/mibee-oss/mibee-nvr-v0.6-promo/"&gt;MiBeeNvr v0.6.0&lt;/a&gt; brought major features like timelapse, video transcoding, and ONVIF enhancements. Unit tests alone are far from enough — the full workflow must be tested against real camera hardware. To provide reliable test machines for this release, three camera projects were updated on the same day, June 5th — both to supply testing environments for the NVR and to solve some typical embedded development engineering problems along the way.&lt;/p&gt;</description></item><item><title>MiBeeNvr v0.5.0: Full ONVIF Protocol Support + Hardware Transcoding + rpi-cam Co-development</title><link>/en/posts/mibee-oss/mibee-nvr-v0.5/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/mibee-oss/mibee-nvr-v0.5/</guid><description>&lt;p&gt;Less than a week after v0.4.0, another 31 commits were pushed. v0.5.0 is a feature-dense release: &lt;strong&gt;full ONVIF protocol support&lt;/strong&gt; (covering all five major services: Device/Media/PTZ/Imaging/Event), &lt;strong&gt;hardware transcoding&lt;/strong&gt; (H.265 → H.264), and recorder reconnection optimizations. 127 files changed, +24,509 / -730 lines. See the full changelog at &lt;a href="https://github.com/Mi-Bee-Studio/MiBeeNvr/releases/tag/v0.5.0"&gt;GitHub Release Notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t seen the previous versions, check out &lt;a href="/en/posts/iot/mibee-nvr-introduction/"&gt;MiBeeNvr Introduction&lt;/a&gt; and &lt;a href="/en/posts/iot/mibee-nvr-v0.4-tech/"&gt;v0.4.0 Technical Post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="full-onvif-protocol-support"&gt;Full ONVIF Protocol Support&lt;/h2&gt;
&lt;p&gt;v0.4.0 already had ONVIF device discovery and stream URL retrieval, but that was just the tip of the ONVIF iceberg. v0.5.0 completes the core services of ONVIF Profile S:&lt;/p&gt;</description></item><item><title>MiBeeHive: The "Hive" Toolbox I Built for My Studio</title><link>/en/posts/mibee-oss/mibeehive-introduction/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/mibee-oss/mibeehive-introduction/</guid><description>&lt;p&gt;Coming from an operations background, later transitioning to development, the number of projects I maintain keeps growing. Various middleware, databases, monitoring components… each version upgrade is a manual labor: go to the official site to find the download link, compare version numbers, manually download to the internal network, then distribute to each machine. I used to write a bunch of Shell scripts to periodically pull the latest versions to the LAN — functional but not user-friendly: scripts scattered everywhere, adding new software required writing parsing logic by hand, and there was nothing to check when things went wrong.&lt;/p&gt;</description></item><item><title>MiBeeNvr v0.4.0: Audio Recording Finally Arrives, Auto-Recovery When Cameras Go Down</title><link>/en/posts/iot/mibee-nvr-v0.4-promo/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/iot/mibee-nvr-v0.4-promo/</guid><description>&lt;p&gt;Previously, MiBeeNvr&amp;rsquo;s MP4 files only had a video track — playback was silent. v0.4.0 fills this gap with &lt;strong&gt;audio recording&lt;/strong&gt;. It also adds more practical &lt;strong&gt;camera health monitoring and auto-recovery&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="recordings-now-have-sound"&gt;Recordings Now Have Sound&lt;/h2&gt;
&lt;p&gt;Each camera can independently enable audio recording:&lt;/p&gt;
&lt;div class="code-block-wrapper" data-lang="yaml"&gt;
 &lt;div class="code-block-header"&gt;
 &lt;div class="code-block-meta"&gt;&lt;span class="code-language"&gt;yaml&lt;/span&gt;&lt;/div&gt;
 
 &lt;button class="copy-button" aria-label="Copy code"&gt;
 &lt;svg class="copy-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;svg class="check-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;polyline points="20 6 9 17 4 12"/&gt;&lt;/svg&gt;
 &lt;/button&gt;
 
 &lt;/div&gt;
 &lt;div class="code-block-body"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cameras&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;front-door&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Front Door Camera&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rtsp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;h264&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;audio_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Supported audio formats:&lt;/p&gt;</description></item><item><title>MiBeeNvr v0.3.0: One-Click Xiaomi Camera Integration, Recordings Never Lost</title><link>/en/posts/iot/mibee-nvr-v0.3-promo/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid>/en/posts/iot/mibee-nvr-v0.3-promo/</guid><description>&lt;p&gt;Got Xiaomi cameras at home? Want to keep your recordings on your own storage instead of relying on the cloud?&lt;/p&gt;
&lt;p&gt;As someone with several Xiaomi cameras at home, I always had one frustration: every time I wanted to check the footage from my doorbell camera, I had to log into Xiaomi Cloud, wait for ages while it loaded, and it would often just spin. Plus, cloud storage charges by the day — it adds up over the month. And if you swap cameras, all your old recordings are gone. Pretty frustrating.&lt;/p&gt;</description></item></channel></rss>