From 260821ed9dab1c3a93fc3c53f4a26ed2df6eff35 Mon Sep 17 00:00:00 2001 From: feyris-tan <4116042+feyris-tan@users.noreply.github.com> Date: Thu, 16 Oct 2025 23:45:27 +0200 Subject: [PATCH] release 10 --- .gitignore | 1 + skyscraper8.Manual/skyscraper8.Manual.tex | 40 +++++++++++++++++++--- skyscraper8/GS/GSE-HEM/GseHemReader.cs | 4 ++- skyscraper8/Program.cs | 1 + skyscraper8/Properties/launchSettings.json | 2 +- skyscraper8/SatIpReadme.txt | 22 ------------ skyscraper8/log4net.config | 1 - skyscraper8/skyscraper8.csproj | 3 -- 8 files changed, 41 insertions(+), 33 deletions(-) delete mode 100644 skyscraper8/SatIpReadme.txt diff --git a/.gitignore b/.gitignore index 833cb57..c9f2959 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ imgui.ini /skyscraper8.Manual/skyscraper8.Manual.pdf /skyscraper8.Manual/skyscraper8.Manual.synctex.gz /.vs/skyscraper8/CopilotIndices/17.14.1231.31060 +/.vs/skyscraper8/CopilotIndices/17.14.1290.42047 diff --git a/skyscraper8.Manual/skyscraper8.Manual.tex b/skyscraper8.Manual/skyscraper8.Manual.tex index e30f9a0..025035a 100644 --- a/skyscraper8.Manual/skyscraper8.Manual.tex +++ b/skyscraper8.Manual/skyscraper8.Manual.tex @@ -74,6 +74,7 @@ On Linux and macOS, any halfway recent shell should be fine. .\skyscraper8.exe cscan tcp://127.0.0.1:6969 \end{verbatim} +\label{sec:gswarning} \subsubsection{Working with GS using StreamReader} There are a few caveats when working with StreamReader.dll to capture GS. @@ -94,7 +95,19 @@ Why is that? While StreamReader.dll's Deencapsulation works correctly in theory, \subsection{Using a BDA compatible tuner} Use TSDuck's \codeword{tsp} and use the \codeword{dvb} input plugin and the \codeword{ip} output plugin. -\\ TODO: Talk about TSDuck here. +Here's how to do it: + +\begin{enumerate} +\item Run skyscraper8 from the commandline using the following command: +\begin{verbatim} +.\skyscraper8.exe udpin +\end{verbatim} +\item Then run \codeword{tsp} like this: +\begin{verbatim} +tsp -v -I dvb -a 4 --delivery-system DVB-S2 --frequency 11,523,000,000 \ + --symbol-rate 22,000,000 --polarity horizontal -O ip 127.0.0.1:9003 +\end{verbatim} +\end{enumerate} \subsection{Using a video4linux compatible tuner} See the paragraph about BDA tuners. The same applies to video4linux compatible tuners. TSDuck's \codeword{tsp} can be used on Windows and Linux in the same way. @@ -157,13 +170,15 @@ Extracted files will be written to the directory the command-line interpreter ha If you are using Microsoft Windows, you can also Drag’n’Drop a TS file onto the skyscraper8.exe. The extracted data will be placed into the same directory the TS is in. + +\label{sec:cannotdo} \section{What skyscraper8 can not do} \begin{itemize} \item Watch TV or Listen to Radio. Extracting files and playing back audio/video are two very different things, and skyscraper8 is not designed to do the latter. If this is something you're looking for, you probably want something like ProgDVB or DVBViewer. \item Descramble encrypted channels. This is illegal in most, if not all, jurisdictions, and I want nothing to with that. \item Circumvent copy protections. TS contained on Blu-Ray disc are usually scrambled using AACS. Although not too difficult, bypassing it is also a complicated legal matter, which is why I prefer not doing it. \item Descramble encrypted DOCSIS\footnote{Data-Over-Cable Service Interface Specifications} Traffic. While skyscraper8 does understand DOCSIS traffic and is perfectly capable of sniffing packets from it using tuners like the TBS-6281 SE, it will drop any scrambled packets - meaning those that have the DOCSIS privacy extension enabled. - \item Do a professional grade analysis of a TS. There are many intricacies in broadcasting systems which are out of scope for a simple file extractor developed by a mere hobbyist. If you're looking for a professional grade analyzing tool, I'd recommend you to check out the tools included in VMA Video Analyzer, Dektec's StreamXpert, GkWare's StreamGuru, or the \codeword{analyze} plugin of TSDuck. + \item Do a professional grade analysis of a TS. There are many intricacies in broadcasting systems which are out of scope for a simple file extractor developed by a mere hobbyist. \hypertarget{bettertools}{If you're looking for a professional grade analyzing tool}, I'd recommend you to check out the tools included in VMA Video Analyzer, Dektec's StreamXpert, GkWare's StreamGuru, or the \codeword{analyze} plugin of TSDuck. \item Handle MPEG-DASH streams. Currently, there are two known video formats used in DVB-NIP: HLS and MPEG-DASH. While skyscraper8 is able to extract segments of both types from a TS, I do not know of an easy way to playback MPEG-DASH formatted streams. HLS on the other hand is trivial. \item Repair broken GS. When using a non STiD135-based tuner to tune to a GS, the framing gets broken in extremely weird ways. Also, when using StreamReader.dll to tune to a GS with a STiD135 - it is imperative to disable to StreamReader.dll's deencapsulator. It often breaks the framing as well. See \hyperref[sec:gswarning]{the notice about GS in Section 2.1} \end{itemize} @@ -171,7 +186,7 @@ If you are using Microsoft Windows, you can also Drag’n’Drop a TS file onto \section{How skyscraper8 was made} skyscraper8 is developed in the C\# programming language, using Microsoft Visual Studio 2022. Therefore it requires a Microsoft .NET runtime, which is included in Microsoft Windows and freely available for most Linux distributions and Apple's macOS. -The .NET assembly of skyscraper8 is not obfuscated or protected in any way. This is on purpose. If you want to study how skyscraper8 works under the hood, I hereby allow you to use tools like RedGate's Reflector or JetBrains' dotPeek to inspect the skyscraper8.dll file. Of course you can also acquire the plain source code from my Gitea instance.\footnote{\url{https://gitea.yo3explorer.moe/ft/skyscraper8}} +The .NET assembly of skyscraper8 is not obfuscated or protected in any way. This is on purpose. If you want to study how skyscraper8 works under the hood, I hereby allow you to use tools like RedGate's Reflector or JetBrains' dotPeek to inspect the skyscraper8.dll file. I plan to release the clear source code at a later date. This document was typeset in \LaTeX{}, using the TeX Live distribution, and while I wrote it myself, I did use GPT-5 for proofreading the initial version of this document. The proofreading of this document is the only part of skyscraper8 for which an LLM was used. No part of the actual skyscraper8 codebase itself was written by an LLM. @@ -184,10 +199,23 @@ Of course, as I got older, I eventually moved onto other things. Like programmin I got internet access much later in my life than my peers did, and when I found out that there are forums in which people discuss the technicalities about video games, it blew my mind. I used to be a frequent reader (and occasional contributor) of the XeNTaX\footnote{Unfortunately, that forum is long gone from the internet, but can still be experienced thanks to the amazing work of the people over at the Internet Archive: \url{https://web.archive.org/web/20230925120533/https://forum.xentax.com/ }} forum, from where I learned a lot! \\ -At the time, my circle of friends was crazy about Yu-Gi-Oh! Online 3, which was an excellent simulation of the trading card game by the same name. +At the time, my circle of friends was crazy about Yu-Gi-Oh! Online 3, which was an excellent simulation of the trading card game by the same name. I was really bad at this game, not even a mediocre player. I was far more busy studying how the game worked under the hood, and eventually managed to write a program that extracts all the card graphics and the soundtrack of the game. This resulted in my guild leader having the best quality available soundtrack rips on his Youtube account. As you can probably guess, I went on and reverse engineered more and more video games. But as life goes on, you eventually graduate from school, head to university, and then get a job. Interests and people can change over time, and so did I. As I grew older I kind of lost interest in video games. Nowadays I rarely play anymore. \\ + +But what has that to do with skyscraper8? That's easy! One day my parents, who I still stay in touch with asked me to record something off live TV. Up until that point, I totally forgot about the dish on the roof of the house my room is in, but at that point it got relevant again. Upon searching for an easy way to record satellite TV on a PC I stumbbled upon Thierry Lelegard's tsduck. With tsp's plugins, it was real easy to schedule a recording. And since I still had the natural curiosity of a game reverse engineer in me, I opened up the .ts file in a hex-editor, and that's exactly the point in time when the DX virus hit me. After reading a bit of the source code of \href{https://images.videolan.org/developers/libdvbpsi.html}{libdvbpsi}, an idea manifested in my head. And that idea became "skyscraper". + +\subsubsection{A Brief history of skyscrapers1 to 8} +At that time had a job of administering some databases. My childhood fantasies of making my own TV guide were now within reach. I had "skyscraper" at home, a bunch of databases at work - and MySQL is free someware. That was shortly before COVID-19 ran wild in the world. During lockdown I had made it: A program that reads a list of frequencies from a database, record a series of TS files, parses all the DVB tables, and writes the results into the database. That was all the first skyscraper could do. It was written in Java, and missed a lot of things. + +skyscraper5 came about when I changed jobs. I was a software developer at that time. And since we used Java at my day job, and I wanted some distance from my job, I switched my hobbyist projects back to .NET. - .NET 5 to be exact - that's why I called it skyscraper5. That was on the 5th of March, 2022. + +Eventually, I upgraded to .NET 8, mainly due to dependency issues, and I renamed the project fittingly to skyscraper8. \\ + +If you read up to this point, I wish to thank you from the bottom of my heart. I guess by now you can tell that skyscraper8 is a very personal and dear matter for me. My goal was never to make the best tool for handling TS files, there are \hyperlink{bettertools}{much better options} regarding that, but to satisfy my desire to learn. And let me tell you, I learned a lot during the development of skyscraper8, both as a person and as a programmer. + + \subsubsection{Music!} -Like a lot of programmers, I do enjoy listening to music while working. Some programmers even put song references in their software. Like how MKVToolnix' version names are actually song names, or how BSD developer fk even put \href{https://www.fabiankeil.de/nutzloseinfos.html}{a list of albums on his website} listing what albums he listened to while making it. Although this is absolutely useless, I'd liketo do this as well. Therefore, here follows a list of musical albums I listened to while developing skyscraper8 - no claim to completeness. +Like a lot of programmers, I do enjoy listening to music while working. Some programmers even put song references in their software. Like how MKVToolnix' version names are actually song names, or how BSD developer fk even put \href{https://www.fabiankeil.de/nutzloseinfos.html}{a list of albums on his website} listing what albums he listened to while making it. Although this is absolutely useless, I'd liketo do this as well. Therefore, here follows a list of musical albums I enjoyed listening to while developing skyscraper8 - no claim to completeness. \begin{itemize} \item Bel Canto - White-Out Conditions @@ -200,6 +228,8 @@ Like a lot of programmers, I do enjoy listening to music while working. Some pro \item Satsuki Shibano / Yoshio Ojima - Caresse \item SHIFT UP - Stellar Blade Original Soundtrack \item Small Affairs - Small Affairs + \item Starmani Series - la fillette révolutionnaire UTENA + \item SuganoMusic - EUROBEAT FESTIVAL VOL.7.5 \item Yoshio Ojima - Hands-Some \item Youssou N’Dour - The Guide (Wommat) \item Yu-Gi-Oh! Sound Duel Quarter Century Collection diff --git a/skyscraper8/GS/GSE-HEM/GseHemReader.cs b/skyscraper8/GS/GSE-HEM/GseHemReader.cs index 364e6b3..7f6b9b8 100644 --- a/skyscraper8/GS/GSE-HEM/GseHemReader.cs +++ b/skyscraper8/GS/GSE-HEM/GseHemReader.cs @@ -32,7 +32,9 @@ public class GseHemReader : IMisHandler int labelTypeIndicator = (a & 0x30) >> 4; if (!startIndicator && !endIndicator) { - throw new NotImplementedException("I didn't expect a GSE Padding packet in GSE-HEM. Please share a sample of this stream, so I can implement this."); + //Padding packets probably shouldn't happen in HEM. + rayBuffer.Resync(); + return; } else { diff --git a/skyscraper8/Program.cs b/skyscraper8/Program.cs index 5a9c125..fbe57a9 100644 --- a/skyscraper8/Program.cs +++ b/skyscraper8/Program.cs @@ -341,6 +341,7 @@ namespace skyscraper5 passing.Run();*/ Console.WriteLine("You're not supposed to run me directly. Run me from the commandline using the following:"); Console.WriteLine("for example: .\\skyscraper8.exe cscan tcp://127.0.0.1:6969"); + Console.WriteLine(" or: .\\skyscraper8.exe udpin - listens on port 9003 on all local interface for udp packets."); Console.WriteLine(" or: .\\skyscraper8.exe \"C:\\path\\to\\file.ts\\"); Console.WriteLine(" or: .\\skyscraper8.exe \"C:\\path\\to\\my\\folder\\with\\ts\\files\\\" (for batch extraction)"); Console.WriteLine(" or: .\\skyscraper8.exe satip IP_ADDRESS DISEQC POLARITY FREQUENCY SYSTEM SYMBOL_RATE (see README file)"); diff --git a/skyscraper8/Properties/launchSettings.json b/skyscraper8/Properties/launchSettings.json index 9a0c143..db520cf 100644 --- a/skyscraper8/Properties/launchSettings.json +++ b/skyscraper8/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "skyscraper8": { "commandName": "Project", - "commandLineArgs": "stid135test \"C:\\Users\\Sascha Schiemann\\Desktop\\Neuer Ordner\\12554h.ts\"", + "commandLineArgs": "udpin udp://172.20.20.130:6969", "remoteDebugEnabled": false }, "Container (Dockerfile)": { diff --git a/skyscraper8/SatIpReadme.txt b/skyscraper8/SatIpReadme.txt deleted file mode 100644 index f03e8c1..0000000 --- a/skyscraper8/SatIpReadme.txt +++ /dev/null @@ -1,22 +0,0 @@ -How to use skyscraper8 with a SAT>IP server: -The general commandline is as follows: - -.\skyscraper8.exe satip IP_ADDRESS DISEQC POLARITY FREQUENCY SYSTEM SYMBOL_RATE - -IP_ADDRESS is either the IP address (for example 172.20.20.122) of your SAT>IP server, or "auto" for autodetection of a SAT>IP server. - -DISEQC is the DiSEqC 1.0 Port you want to use. Say "1" here for A/A, "2" for B/A, "3" for A/B, 4 for B/B - -POLARITY is either "H" or "V" - -FREQUENCY is the frequency you want to tune to in MHz. (for example 12226) - -SYSTEM is either "S" or "S2" - -SYMBOL_RATE is the symbol rate of the transponder you want to tune to in Ks. (for example 27500) - -So a valid command would be for example ".\skyscraper8.exe satip 172.20.20.122 2 V 12226 S2 27500" to tune to the Hotbird DVB-NIP demo transponder, assuming Hotbird is at DiSEqC B/A. - -If you don't know your SAT>IP server address, the following command would accomplish the same: ".\skyscraper8.exe satip auto 2 V 12226 S2 27500" - -If your SAT>IP server features a StiD135 chipset, you can also catch GS/GSE with it. \ No newline at end of file diff --git a/skyscraper8/log4net.config b/skyscraper8/log4net.config index 366341b..90ecd32 100644 --- a/skyscraper8/log4net.config +++ b/skyscraper8/log4net.config @@ -3,7 +3,6 @@ - diff --git a/skyscraper8/skyscraper8.csproj b/skyscraper8/skyscraper8.csproj index 5ee6e44..98d9846 100644 --- a/skyscraper8/skyscraper8.csproj +++ b/skyscraper8/skyscraper8.csproj @@ -36,9 +36,6 @@ PreserveNewest - - PreserveNewest -