# Robert Jefe Lindstaedt > Rob is a tech guy doing things. Personal website and blog of Robert Jefe Lindstaedt — a tech guy working on software engineering, systems design, and internet things. ## Main Pages - [Home](https://eljefedelrodeo.humans.airdress.co/): Landing page - [About Robert](https://eljefedelrodeo.humans.airdress.co/about/): Background and profile - [About the Name](https://eljefedelrodeo.humans.airdress.co/the-name/): Origin of "el jefe del rodeo" - [Blog](https://eljefedelrodeo.humans.airdress.co/blog/): Technical blog posts - [Contact](https://eljefedelrodeo.humans.airdress.co/contact/): Contact form --- ## Running a Basic RTSP Test Stream URL: https://eljefedelrodeo.humans.airdress.co/blog/03-rtsp-test-stream/ Date: 2025-01-19 Author: Robert Jefe Lindstaedt Categories: Debugging Tags: media, streaming, rtsp, mediamtx ---

When debugging media streaming applications you likely need to test a source. ChatGPT and Google leave you stranded with outdated URLs. Here is a good alternative solution.

--- Lately, I am working with some "AI" (booooo!) enabled cameras (nice!). They allow uploading Python or C++ code. Usually, this will be a combination of [OpenCV](https://github.com/opencv/opencv) code and some SDK-calling to move the camera or such. Hence, a good DX should be a local development of the CV-specific bits and only then uploading. I am generating parametrised test data locally for this and am streaming this into OpenCV, as this is a nice, non-"works-on-my-machine"-approach. This way the developer can decide where they get the stream from and swap out the source easily. Annoyingly though, you need to connect some pieces together for this that are: - the streaming source - possibly [ffmpeg](https://github.com/FFmpeg/FFmpeg) - and [RTSP](https://en.wikipedia.org/wiki/Real-Time_Streaming_Protocol)-Server such as [mediamtx](https://github.com/bluenviron/mediamtx) - your own OS (this part I am developing on Windows 11; meeeh!) - your own code Since you want to reduce as many points of failures in a debugging session for this, I wanted to replace the following: - the source, for example a video for something static, that ideally I would not need to check into git. Also, avoiding [codec hell](https://blog.codinghorror.com/video-codecs-are-the-next-dll-hell/) - the receiving end for [VLC](https://www.videolan.org/vlc/) Googling did not yield nice results, since a lot of people are not writing about stuff like this anymore (hence this blog ;-)). Also, no-one seems to publish nice RTSP public links anymore. Prompting ChatGPT for `Give me a public rtsp stream url` was as pointless as often when do something niche-y - why the hell does only simple work work with this thing: I leaded to invalid links and outdated `mediamtx` examples. Great! Luckily, diving deep led me to this [great guy](https://superuser.com/users/635712/rotem)'s comment, [here](https://superuser.com/q/1823654/341454). His snippet would read as: "use `ffmpeg`s internal test stream and forward it" ```bash ffmpeg -report -v verbose -re -f lavfi -i testsrc=size=720x404:rate=59.94 -f lavfi -i sine=frequency=400 -vcodec libx264 -pix_fmt yuv420p -acodec aac -ar 24000 -rtsp_transport tcp -f rtsp rtsp://localhost:8554/mystream ``` One should care about codec stuff here, but that is out scope. This will start streaming to the to `mediamtx` with its default config. For verbosity and if this gets out of date, here is the current config:
mediamtx.yaml ```yaml ############################################### # Global settings # Settings in this section are applied anywhere. ############################################### # Global settings -> General # Verbosity of the program; available values are "error", "warn", "info", "debug". logLevel: info # Destinations of log messages; available values are "stdout", "file" and "syslog". logDestinations: [stdout] # If "file" is in logDestinations, this is the file which will receive the logs. logFile: mediamtx.log # Timeout of read operations. readTimeout: 10s # Timeout of write operations. writeTimeout: 10s # Size of the queue of outgoing packets. # A higher value allows to increase throughput, a lower value allows to save RAM. writeQueueSize: 512 # Maximum size of outgoing UDP packets. # This can be decreased to avoid fragmentation on networks with a low UDP MTU. udpMaxPayloadSize: 1472 # Command to run when a client connects to the server. # This is terminated with SIGINT when a client disconnects from the server. # The following environment variables are available: # * MTX_CONN_TYPE: connection type # * MTX_CONN_ID: connection ID # * RTSP_PORT: RTSP server port runOnConnect: # Restart the command if it exits. runOnConnectRestart: no # Command to run when a client disconnects from the server. # Environment variables are the same of runOnConnect. runOnDisconnect: ############################################### # Global settings -> Authentication # Authentication method. Available values are: # * internal: users are stored in the configuration file # * http: an external HTTP URL is contacted to perform authentication # * jwt: an external identity server provides authentication through JWTs authMethod: internal # Internal authentication. # list of users. authInternalUsers: # Default unprivileged user. # Username. 'any' means any user, including anonymous ones. - user: any # Password. Not used in case of 'any' user. pass: # IPs or networks allowed to use this user. An empty list means any IP. ips: [] # List of permissions. permissions: # Available actions are: publish, read, playback, api, metrics, pprof. - action: publish # Paths can be set to further restrict access to a specific path. # An empty path means any path. # Regular expressions can be used by using a tilde as prefix. path: - action: read path: - action: playback path: # Default administrator. # This allows to use API, metrics and PPROF without authentication, # if the IP is localhost. - user: any pass: ips: ['127.0.0.1', '::1'] permissions: - action: api - action: metrics - action: pprof # HTTP-based authentication. authHTTPAddress: authHTTPExclude: - action: api - action: metrics - action: pprof # JWT-based authentication. authJWTJWKS: authJWTClaimKey: mediamtx_permissions ############################################### # Global settings -> Control API api: no apiAddress: :9997 ############################################### # Global settings -> RTSP server rtsp: yes rtspTransports: [udp, multicast, tcp] rtspEncryption: 'no' rtspAddress: :8554 ############################################### # Global settings -> RTMP server rtmp: yes rtmpAddress: :1935 rtmpEncryption: 'no' ############################################### # Global settings -> HLS server hls: yes hlsAddress: :8888 hlsVariant: lowLatency ############################################### # Global settings -> WebRTC server webrtc: yes webrtcAddress: :8889 ############################################### # Global settings -> SRT server srt: yes srtAddress: :8890 ############################################### # Default path settings pathDefaults: source: publisher sourceOnDemand: no maxReaders: 0 record: no overridePublisher: yes ############################################### # Path settings paths: all_others: ```
Now, you can run VLC like this... ![Image showing the VLC network stream configuration](/images/blog/media/vlc-network-stream-config.png) ...and you will receive a test steam (audio and video) that looks like this... ![Image showing the VLC network stream configuration](/images/blog/media/vlc-test-source.png). A common read about `testsrc` is this the [bogotobogo blog(or whatever that is :)) here](https://www.bogotobogo.com/FFMpeg/ffmpeg_video_test_patterns_src.php) --- ## This Site: Brand Header URL: https://eljefedelrodeo.humans.airdress.co/blog/brand-header-credit/ Date: 2024-07-03 Author: Robert Jefe Lindstaedt Categories: Op-Ed Tags: frontend, typography, css When not having much of a design creativity, I rely on giants. I mean I still can choose badly...but let's move forward with something. I am aiming for some kind of 80s and cyberpunk crossover HUD look here. I really wanna leave current en vogue "let's not bother anyone" web design. While having technical abilities and ambition, I do lack original creativity to come up with something totally new, yet I am persistent in finding great stuff. ## A Font Recently, I discovered and immediately fell in love with [dafont.com](https://www.dafont.com/). Without much more of a passing due diligence, I dig it for being structured, tagged source for free fonts, driven by that community...and so do ChatGpt and Gemini apparently! **With Gemini still not being able to share shats and ChatGPT not being able to share convos with images...lol...AI... here is a screenshot.** A chatgpt conversation to find a font So, thank you [cabreratypo on Dafont](https://www.dafont.com/alejandro-cabrera-avila.d2473)!!!! ## Some Styling Okay, now let's make this 3d. Chatgpt won't help...or not give great options. But the humans (I suppose) over at [Avada](https://avada.com/) do on their [blog](https://blog.avada.io/css/3d-text-effects). Great compilation and I really wonder what the motivation behind this here was...lol: > 19+ Best CSS 3D Text Effects Examples from hundreds of the CSS 3D Text Effects reviews in the market (Codepen.io) as derived from Avada Commerce Ranking which is using Avada Commerce scores, rating reviews, search results, social metrics. The bellow reviews were picked manually by Avada Commerce experts, if your CSS 3D Text Effects does not include in the list, feel free to contact us. The best CSS 3D Text Effects css collection is ranked and result in July 3, 2024. You can find free CSS 3D Text Effects examples or alternatives to CSS 3D Text Effects also. Also, to you: thank you!!! --- ## [wip] Essential Reads: Systems and Requirements Engineering URL: https://eljefedelrodeo.humans.airdress.co/blog/02-essential-reads-system-and-requirements-engineering/ Date: 2024-07-01 Author: Robert Jefe Lindstaedt Categories: Essential Reads Tags: systems-engineering, requirements-engineering, roadmapping, wip ---

Planning systems to become successful needs more attention. Let's learn from the best.

--- When setting out to create something new may it be: - a new venture - a new project - a new product ...we tend to ask ourselves: _How can we plan better than last time?_ Defining the tactics for such an endeavour obviously depends on on many factors. Since you have read the word _depends_ and probably rolled your eyes, we will jump ahead and assume some conditions - we are a small or medium or no organisation at all - we feel inspired by successful organisations, but will not blindly follow what they - we will read what very large or very large organisations are doing and trim it to our needs ## Why Looking Towards Others? We could also just invent something - and indeed this is something we need to do to get ahead eventually. However, other organisations have gone through very many maturity stages, by failing (and succeeding) forward. Those large organisation are following principles already, that we are striving to achieve, because we want to emulate their success. Dismissing their oftentimes public record of historic learning, would be unwise or just very uneconomic. Also, big organisations define the playing field, with things such as **compliance**, because they are relevant enough to be attacked. Rules are not only there to be followed, as they represent in the worst cases a kind of physical barrier, they can though also be used as guidance for us, what to do. If need be, we could of course take guidelines of such organisations and blindly emulate them, carrying or own innovation forward all the while, or just start innovating, once we have reached their level of maturity. ## What to Read? In recent years US government organisations (no affiliation or opinion about them) have shown to produce a lot of documents and statements that are actually very useful. And they need to be public to a degree. Compare your own googling of mediocre blog posts - it's not you, it's the internet - to this treasure trove of what I dub the [`DoD CTO`](https://www.cto.mil/) (not a person but _DoD Research & Engineering, OUSD(R&E)_ -> Office of [Under Secretary of Defense for Research and Engineering](https://en.wikipedia.org/wiki/Under_Secretary_of_Defense_for_Research_and_Engineering)). Super cool. They run the... ### DoD Systems Engineering Guidebook Available under this [link](https://www.cto.mil/wp-content/uploads/2024/05/SE-Guidebook-Feb2022.pdf) and their [library](https://www.cto.mil/sea/pg/) you will find a guide for free, that is complete, with no bells and whistles that you won't need. Well, ignore the military bits if you want. Let alone looking at their table of contents should give of list of things we need cover. Things that catch my eye: - implementation is tiny activity - requirement engineering is central We will dive deeper into those topics, but it is a great starter, is it not?
DoD Systems Engineering Guidebook TOC page 1 DoD Systems Engineering Guidebook TOC page 2 DoD Systems Engineering Guidebook TOC page 3
--- ## Hello World! URL: https://eljefedelrodeo.humans.airdress.co/blog/post-1/ Date: 2024-07-01 Author: Robert Jefe Lindstaedt Categories: Op-Ed Tags: hello-worlds My new website is live.