Preface
Watching TV is an essential entertainment activity at home, but enjoying the content you want to watch comfortably is not a simple task. Sometimes, even money can’t buy peace of mind, let alone practices like “exclusive ads for members” or “paying extra for a viewing pass to watch currently trending shows”—utterly frustrating behaviors. Hence, I’m documenting my journey of optimizing home viewing here, both to share ideas and to help improve everyone’s quality of life.
My Setup
First, let me introduce my basic setup. If it matches yours, you can read on; if not, you can still use it as a reference.
Equipment
-
A Sony 65X90J TV as the primary playback device, purchased during JD.com’s 618 sale for ¥6000+. Any TV will work, though.
-
An Apple TV 4K (2021) as a secondary playback device, bought from JD International for ¥1300. Infuse is exclusive to Apple platforms, but playing directly on a computer is also an option.
-
A basic ZTE WiFi6 router provided by China Unicom as the main router—free of charge.
-
A NanoPi R4S serving as a ](https://baike.baidu.com/item/软路由/4824918) running OpenWrt, purchased from Taobao for around ¥500. Other soft router systems/hardware will also work.
-
An ](https://firecore.com/infuse) subscription as the playback client, purchased from the U.S. Apple Store for about ¥70 per year. Other playback software supporting protocols like WebDAV will suffice.
-
China Unicom broadband as the foundational infrastructure.
Note: My R4S is configured in ](https://sspai.com/post/59708) mode to avoid issues with devices that don’t require special network access, such as 360 surveillance cameras, Huawei smart lights, Xiaomi smart clothes racks, and Little Swan smart washing machines. These “smart” devices often fail to connect when the home network has special configurations, especially the 360 cameras. Thus, they must connect directly, necessitating the use of a gateway router. Most devices default to direct connection, while a few are specially configured for alternative networks.
Requirements
-
Watching live TV broadcasts like CCTV News during meals.
-
Watching older American/British shows like Friends or Game of Thrones. I’m not interested in new series and don’t follow trends.
-
Accessing movies/TV shows that get censored on Alibaba Cloud Drive or Baidu Netdisk—e.g., films currently in theaters, trending streaming shows, or movies promoting patriotism, professionalism, integrity, and friendliness.
-
Background entertainment like standalone animated series (Tom and Jerry, Doraemon, Crayon Shin-chan, etc.) for casual viewing.
-
Watching documentaries in Blu-ray quality.
-
Smooth playback without buffering.
-
A one-time setup with minimal ongoing maintenance—I prefer stability and long-term solutions.
-
Avoiding the hassle of manually downloading resources or worrying about BT downloads (e.g., via Thunder) damaging SSD storage.
-
A minimalist approach to software: avoiding unnecessary installations, preferring single solutions, and minimizing system impact (especially for Github-sourced software). Thus, ](https://www.docker.com/get-started/#) installations are prioritized.
Note: Some prefer automation tools like Sonarr + Jackett + qBittorrent for auto-downloading new episodes, but my needs aren’t that demanding. Most of my viewing is done via Alibaba Cloud Drive for domestic content (e.g., CCTV documentaries) or common foreign series (e.g., BBC documentaries, Friends). I skipped this automated setup to avoid buying extra large-capacity hard drives and because Alibaba Cloud Drive remains my primary movie source.
Early Frustrations
To save others from similar pitfalls, I’ll share my missteps. Skip to the next section if uninterested.
Emby
Initially, drawn by its sleek interface and ease of setup, I tried ](https://post.smzdm.com/p/735222/). However, public or paid services either required specific connection methods (e.g., timed check-ins or answering questions) or suffered from terrible speeds—especially for Blu-ray movies (20GB+) or during peak hours. Additional issues, like Infuse’s library scanning (not Emby’s fault), led me to abandon this after ](https://www.xheldon.com/life/apple-tv-using-and-problem.html#:~:text=infuse 首次使用时,登陆完 Emby 服务后).
IPTV
For live local TV channels, I considered ](https://baike.baidu.com/item/iptv/113036). ISPs often offer paid IPTV services with broadband, but I opted for free alternatives. Here’s how:
- Use a client like iPlay TV for Apple TV ($5.99).
- Add free live stream URLs sourced from Github (READMEs often explain usage). These are kindly shared by users scraping ISP IPTV addresses.
However, the downside of this solution is that live streaming sources are unstable. You often need to manually update the address, or some playback sources within the address become invalid. After experiencing this a few times, it becomes quite frustrating. As a result, for watching CCTV live broadcasts afterward, I either cast from my phone or use the New Audiovisual app installed on my Android TV.
Current Solution
Note: The foundation for all the following configurations is that devices at home—such as Apple TV, R4S, and Mac—are on the same network segment. Otherwise, they won’t recognize each other. My current network segment address is
192.168.7.x. For example, the R4S is located at192.168.7.2, and the main router is at192.168.7.1. Devices connected to the same router are on the same network segment, so this isn’t a major concern here. This is just a reminder—if settings aren’t working, this might be the reason.
-
With R4S, use Infuse to watch movies via the WebDAV protocol provided by Aliyun Drive ](https://baike.baidu.com/item/WebDAV/4610909?fr=aladdin). Simply search online for the movie name + “Aliyun Drive” and transfer it. For TV series, search for the series name + “Aliyun Drive” + “scraping” (meaning the episodes, posters, cast, and season info are already organized, allowing you to view them as a series in Infuse).
-
With R4S, use qBittorrent along with the Jackett search plugin and an external hard drive connected to the soft router to download movies for offline viewing. This avoids damaging your computer’s SSD and eliminates the need for additional software on your PC. This method serves as a backup for movies that get removed from Aliyun Drive due to certain reasons.

Implementation
All the plugins mentioned below for the R4S soft router come pre-installed by the seller when purchased. You can ask the seller to flash the system for you—no manual installation is required.
Aliyun Drive
Use the Aliyun Drive plugin 阿里云盘 WebDAV for R4S (Project Link):

After installing the plugin, the configuration is straightforward. There are two main settings:
Refresh Token: Open Aliyun Drive’s web page in Chrome, presscmd+opt+ito open the console, then go to theApplicationtab. ClickLocal Storageon the left, search for the keytoken, and copy the value ofrefresh_tokenfrom the results. Paste it into the plugin settings.

Note: As the name suggests,
refresh_tokenis used to retrieve the actual token. From what I’ve seen in the code, it refreshes every 117 minutes (likely because the token expires after 2 hours). If the R4S loses power or disconnects from the network, and Aliyun Drive becomes inaccessible, you’ll need to re-enter therefresh_token.
For the port, choose any unused one—I set mine to 8982. Check 启用, then click Save & Apply at the bottom right to complete the setup. You can now access it via browser (assuming your router’s IP is 192.168.7.2:8982):

Next, configure Infuse to recognize this local WebDAV service:
- Go to Settings > Network > Shares > Add Share.

Enter the local IP address and port in the advanced settings. Then, go to Settings > Media Libraries, check all the folders in Aliyun Drive, and they’ll appear on the homepage. Note: If files are added or deleted, you’ll need to toggle the checkboxes to refresh the view.

Homepage view:

Explore other Infuse features on your own.
qBittorrent
Sometimes, due to well-known reasons, certain resources on Aliyun Drive get taken down. To download popular shows or international series, this method is necessary.
qBittorrent supports magnet links and BT downloads. While you can install it directly on your computer, BT downloads can harm SSDs. To avoid using it on my new Mac Studio, I run it on the soft router with an external hard drive attached to the R4S. Here’s how to set it up:
Mounting the External Hard Drive
I had a 500GB mechanical hard drive (disk partition type recommended as exFAT; Mac’s APFS is not recognized and can be reformatted using Mac’s Disk Utility) that I bought during college, which had been gathering dust in a drawer, so I decided to put it to use. The hard drive can be recognized when directly plugged into the R4S, but it needs to be mounted—this is a computer concept. Think of it like this: for the soft router, an external hardware device is connected to the system via the universal USB protocol, but the system doesn’t know how to handle it after connection. Therefore, after connecting the external hard drive, the soft router will display a virtual mount point (indicated by /dev/sda below), meaning the hard drive is mounted to this path in the router system. You then need to configure which path at the actual /mnt/ physical mount point this virtual mount point should map to in order to correctly access the external hard drive device.
Navigate to 系统-磁盘管理, where you can see the external hard drive (highlighted in the red box). At this point, click 挂载点 below and add the device:

Go to 系统-挂载点, and as shown in the image, you’ll see 挂载点 at the bottom:
In the image, I’ve already mounted it, so the first red box appears. By default, it won’t be there—after adding the mount point below, you’ll see it in
已挂载的文件系统above. Note: In Linux, externally connected devices are usually mounted under/mnt. After adding it, check if the capacity matches that of the external hard drive. Due to partitioning, there are two physical hard drives that can be mounted under the virtual mount point/dev/sda: one is/mnt/sda1, which is only a few hundred MB, and the other is/mnt/sda2, which is the actual read-write hard drive.

After this, if you’re using a Mac, you can directly discover the device in Finder’s 网络. Since the R4S comes with an SMB sharing program by default (as mentioned in the configuration below), you can modify the sharing settings for more customization (though in the R4S, the only thing you can change is the name).
Configuring Samba Sharing
The reason we configure the router’s Samba sharing (i.e., the SMB protocol) first is that it eliminates the need to log into the router via SSH and modify configuration files through the command line, making it more beginner-friendly. Hence, this step is prioritized.
Open the router configuration page in a browser and go to 网络存储-网络共享. Fill in the details as follows: the hostname is the name displayed in Finder, while the description and workgroup can be left as default. You’ll notice that the 自动共享 option is enabled by default, which aligns with what I mentioned earlier—this step isn’t strictly necessary. However, if automatic sharing is enabled by default, it shares the root directory, which includes /mnt/sda1. As someone with OCD, I had to change this, so configure 共享目录 below:

One thing to note here is that you need to configure the second tab on this page, 编辑模板, and change the settings to disable password requirements and set the security sharing type to “Share” (allowing anonymous connections). Otherwise, you’ll need to enter credentials, which is cumbersome:

Then click 保存并应用 in the bottom-right corner.
Once done, you can see it directly in Finder > Network on your Mac:

You can also manually connect to the server, as shown here:


Configuring qBittorrent
Go to the 网络存储-qBittorrent plugin in the soft router and configure it as follows, using the mount point and directory /mnt/sda2/ from earlier:

The main settings to configure are the “Configuration file storage path” and “Download file storage directory,” which should be changed to paths under the external hard drive’s /mnt/sda2 (the image above shows the interface after startup; before startup, there won’t be prompts like “Open Web Page” or “qBittorrent Running”). After configuring, click Save but don’t apply yet. Then go to the 下载设置 tab and disable the 启用临时目录 option to avoid generating large temporary files:

Then click Save and Apply.
Next, access qBittorrent’s web management interface by entering the router’s address plus the port number you just set, 192.168.7.2:9091:

At this point, the setup is complete. You can now download any magnet links or torrent files you find online.
If you still don’t want to hunt for torrents manually or if the magnet links you find online are dead and won’t download, read on.
Setting Up qBittorrent’s Jackett Search Plugin
This plugin allows you to directly search for resources using Jackett within qBittorrent and download them with a right-click, as shown below:

However, this is not the default configuration (it seems that if you directly download the qBittorrent client for Windows or Mac, the Jackett search plugin is enabled by default, but the router does not come with any default plugins). You need to install it separately. Follow the steps below and refer to the images:

After clicking “Install New Plugin,” you will be prompted to enter an address. This address can be obtained from here, or you can directly enter this address—it’s the same: https://raw.githubusercontent.com/qbittorrent/search-plugins/master/nova3/engines/jackett.py
Once installed, the plugin will appear in the list of installed search plugins.
Note: The above installation only adds the Jackett plugin for qBittorrent, enabling qBittorrent to work with Jackett—similar to how Safari installs a Thunder plugin. At this stage, it still won’t work because you also need to install the Thunder software itself. The same applies to the Jackett plugin: installing just the plugin isn’t enough; you must also install the Jackett service.
Installing the Jackett Service
I couldn’t get Jackett to install directly on the router—it kept throwing errors, likely due to missing some environment configuration. Eventually, I gave up because I planned to use Docker on my local Mac instead. So, I moved this step to my local Mac and only needed to configure qBittorrent’s Jackett plugin accordingly.
You can download Docker from the official website here. After installation, you can test whether the environment variables are set up correctly by entering docker in the terminal.
Installing Jackett in Docker is straightforward. The steps are outlined in the official documentation here, but here’s a brief summary:
Open the terminal and copy the Docker CLI code from the official installation steps:
1 | |
For example, in the configuration above, my local hard drive paths are ~/Code/Docker/config and ~/Code/Docker/downloads. In simple terms, this configuration maps the host port 9117 to the Docker container’s port 9117, enables auto-updates, and prevents the container from restarting unless it stops unexpectedly.
Once done, you’ll see the service running in Docker (it starts automatically by default):

Then, access the following address in your browser: 127.0.0.1:9117 (or use your local LAN IP as shown below—it’s the same) to see Jackett’s web configuration page:

Make sure to note the API Key here—you’ll need it in the next step to configure Jackett in qBittorrent.
Since Jackett is installed locally, if you want the qBittorrent plugin on the router to access the locally installed Jackett, you’ll need to know your local LAN IP. You can check this in your system settings:

Next, open qBittorrent’s configuration directory in Finder (remember where we set qBittorrent’s configuration directory earlier? We stored it on the external hard drive connected to the soft router). The Finder path is config/qBittorrent/data/nova3/engines/jackett.json. Set the address and port:

After refreshing qBittorrent’s page and opening the plugin settings, you’ll see that the address and plugin are successfully configured:

At this point, the configuration is complete.
Note: After configuring Jackett, you still need to add Indexers in the Jackett service so it knows which websites to search for torrents. This process is relatively simple:
Click “Add Indexer,” then from the pop-up interface, click the “+” on the right. I added all sites marked as Public with Chinese or English languages (once added, they no longer appear in the list, so the screenshot shows very few Chinese, English, or Public sites). Private sites require membership cookies:


Categories, as the name suggests, refer to the types of resources available on the sites. Among them, XXX is, well, you know—but such resources are harder to download via BT because fewer people are downloading them, and BT relies on more seeders for faster speeds.
Due to historical reasons, domestic resources are scarce, while foreign resources, no matter how old, always have plenty of seeders and fast speeds. Alas, under these circumstances, we all share some responsibility—but let’s not dwell on that here.
For example, trying to download a two-year-old domestic movie like Crazy Alien:

The seeders and resources are few. But downloading a decade-old foreign movie like Harry Potter yields many more:


This concludes the router-side configuration. The final step is to add the external hard drive connected to the soft router to the playback client (e.g., Infuse) to watch the downloaded movies.
Configuring Infuse
This step is relatively simple, using the same configuration method as before for WebDAV, except this time replacing the WebDAV protocol with the SMB protocol. Here are the screenshots directly:

Here, 位址 is the soft router address—mine is 192.168.7.2. The default port 445 will suffice.
Below are the results:


Testing
Let’s test the network speed of Alibaba Cloud Drive:

Now, test the network speed of the external hard drive connected to the soft router:

The reason why the locally connected external hard drive (running over the LAN) is slower than the remotely mounted Alibaba Cloud Drive (running over HTTP) is due to the speed limitations of SMB.
Final Thoughts
The goal of electronic products or software should be to serve people, not to force people to adapt to the software. This is also why macOS has a better reputation than Windows. I believe no one wants to spend their days tinkering with these things—everyone would prefer a TV, TV box, or TV software that works out of the box. However, reality often makes it impossible to achieve such convenience. In such cases, don’t shy away from the hassle. Tinkering for those who can’t (like family members) and providing them with a seamless, ready-to-use TV, TV box, or TV software is its own kind of happiness.
Wishing everyone the freedom to enjoy their viewing!
I often wish that when facing some key decisions in life, someone could tell me the best course of action so that I would not waste my precious time. Putting myself in others' shoes, I therefore write blogs often, hoping to record in this tiny corner of the vast Internet the once-in-a-lifetime experiences that matter to me, and to help those who seek help.