drupal 9 custom local stream wrapper
This is a modified snippet from a live real estate project to define a custom stream wrapper.
Add the stream wrapper as a service in your services YML file:
    stream_wrapper.pics:
      class: Drupal\mymod\PicsStreamWrapper
      tags:
        - { name: stream, scheme: pics }
Create the stream wrapper class extending LocalStream:
    <?php
    namespace Drupal\mymod;
    use Drupal\Core\StreamWrapper\LocalStream;
    class PicsStreamWrapper extends LocalStream {
        public function getDirectoryPath() {
            return 'sites/default/files/pics';
        }
        public function getExternalUrl() {
            global $base_url;
            $path = str_replace('\\', '/', $this->getTarget());
            return $base_url . '/' . self::getDirectoryPath() . '/' . $path;
        }
        public function getName() {
            return 'Pics Stream';
        }
        public function getDescription() {
            return 'Pics stream for listing property pics.';
        }
    }
