Querschnittliche Konzepte

Die fünf Konzepte dieses Kapitels sind aus Kontext, ADRs und Qualitätsszenarien abgeleitet. Das Video behandelt keines davon als eigenes Thema. Was abgeleitet ist, steht so dabei; was die Quellen nicht hergeben, steht als offener Punkt.

8.1 Threat Model (STRIDE)

Note
Die folgende Liste ist abgeleitet aus Kontext und ADRs, nicht aus dem Video. Eberhard stuft Security und Vertraulichkeit bewusst niedrig ein: "das sind am Ende Fahrradreparaturdaten, ist das wirklich so kritisch? Da müssen wir mit dem Experten nochmal sprechen" (Folge 111, A14, 41:44 bis 43:00 und 58:03). Das Threat Model hält fest, was diese Einstufung in Kauf nimmt.
Transkript Folge 111, 41:44 bis 43:00

So, und da ist das, was uns jetzt der Experte gesagt hat. Der hat uns gesagt, insbesondere Benutzerfreundlichkeit ist wichtig. Wenn diese, wenn wir mit diesem System nicht arbeiten können, insbesondere wenn Kunden damit keine Rechnungen, keine Reparaturen beauftragen, dann haben wir ein echtes Problem. Und das wird halt nur funktionieren, wenn das benutzerfreundlich ist. Das heißt also, wir wollen gerne ein benutzerfreundliches System haben. In erster Linie für Kunden, aber auch für die Leute in der Werkstatt. Und da gibt es noch eine andere Story. Und die andere Story ist, wenn dieses System hat besonders gut funktioniert, dann wollen wir halt eine SaaS-Lösung draus machen. Also dann wollen wir halt irgendwie dieses System anbieten in diesem Internet. Und dann wollen wir halt dafür sorgen, dass andere Leute es benutzen können. Das heißt, von den Themen, die wir hier haben, haben wir in erster Linie etwas in Bezug auf Benutzbarkeit. So und das ist, finde ich jetzt, erstmal eine spannende Aussage und vielleicht auch gar eine atypische. Also ich finde halt, dass Benutzerfreundlichkeit oder ich vermute, dass Benutzerfreundlichkeit in vielen Kontexten ein sehr wichtiger Punkt ist. Weil ohne Benutzerfreundlichkeit will eben jemand das System benutzen. Und dann stellt sich die Frage, warum zum Teufel entwickeln wir das überhaupt?

ID STRIDE Bedrohung Betroffenes Element

T-001

Spoofing

Ein Angreifer stiehlt das JWT-Cookie des Webshops und tritt als Kund:in auf. Das Reparatursystem prüft nur dieses Cookie (ADR-001).

Login, JWT-Cookie, Origin /reparatur

T-002

Tampering

Der Bezahlstatus wird auf dem Weg vom Online Payment Service oder von der Kasse zum Modul Bezahlung manipuliert; eine unbezahlte Reparatur gilt als bezahlt (R-011, R-012).

REST-Statusabfrage Payment Service, REST Kasse

T-003

Repudiation

Eine Mechaniker:in bestreitet eine Protokollposition (etwa "Bremsklötze eingebaut, 10 €"), oder eine Kund:in bestreitet die Beauftragung.

Reparaturprotokoll, Auftrag

T-004

Information Disclosure

Kundenadressen und Zahlungsarten werden über die REST-Schnittstelle der Webshop User Database oder die Statusseite offengelegt (R-001).

REST Webshop User Database, Statusseite

T-005

Denial of Service

Ein Angreifer überlastet das Web-System und bricht das Ziel 99,9 % zwischen 7 und 24 Uhr (QS-Z-04).

Web-System, Umleitung vor dem Webshop

T-006

Elevation of Privilege

Eine Kund:in erreicht Funktionen der Mechaniker:in oder Shop-Mitarbeiter:in, etwa Reparatur protokollieren oder bezahlen.

Rollen im Reparatursystem

8.2 Security

Jede Maßnahme nennt die T-IDs, die sie schließt. Die Maßnahmen sind abgeleitet; zwei Zeilen stützen sich auf Folge 113 und sind als Videobeleg gekennzeichnet.

Maßnahme Beschreibung Schließt

Standard-JWT-Prüfung

Das Reparatursystem prüft Signatur, Ablauf und Aussteller des JWT-Cookies bei jeder Anfrage. Es vertraut keinem Token, das der Webshop nicht ausgestellt hat (ADR-001).

T-001 (teilweise), T-006

HTTPS für alle Verbindungen

Browser zu /reparatur und alle REST-Aufrufe nach außen laufen verschlüsselt. Das Cookie trägt die Attribute Secure und HttpOnly.

T-001, T-004

Same-Origin-Policy und Pfad /reparatur

Das Cookie erreicht nur die Webshop-Domain (ADR-002). Der geteilte Origin mit dem Webshop bleibt als R-007 benannt.

T-001 (Cookie verlässt die Domain nicht)

Bezahlstatus nur aus dem Backend

Das Modul Bezahlung übernimmt den Zahlungsstatus ausschließlich per REST-Abfrage beim Payment Service oder bei der Kasse, nie aus dem Redirect des Browsers (ADR-004).

T-002

Rollen aus dem Kontext

Drei Rollen: Kund:in, Shop-Mitarbeiter:in, Fahrrad-Mechaniker:in (Board Seite 1). Werkstattfunktionen sind für Kund:innen nicht erreichbar.

T-006

Nachvollziehbares Protokoll

Jede Protokollposition trägt Zeitstempel und Urheber:in (siehe 8.4 Audit).

T-003

Provider-Schutz gegen Überlast

Der Cloud-Betrieb bei AWS (ADR-013) bringt Schutz des Anbieters mit; der Elastic Load Balancer vor mindestens zwei Instanzen (ADR-015) verteilt die Last.

T-005 (teilweise)

Security-Updates durch eigenen Support

Videobeleg, nicht abgeleitet: Cloud allein reicht nicht, weil jemand "Updates installieren" muss, "weil es Security-Probleme gibt" (Folge 113, 29:05; ADR-017). Security ist damit ein Grund für den eigenen Support, nicht Gegenstand eines Szenarios.

keine T-ID; hält die übrigen Maßnahmen aktuell

DSGVO in AWS

Videobeleg, nicht abgeleitet: Eberhard prüft die DSGVO für den Cloud-Betrieb und hält sie für "machbar, kein Killer-Argument" (Folge 113, 43:39; ADR-013).

T-004 (rechtlicher Rahmen, keine technische Maßnahme)

Note
Offen: Wie das Reparatursystem Rollen aus dem JWT des Webshops ableitet, ist nicht entschieden. Der Webshop kennt nur Kund:innen; Mitarbeitende und Mechaniker:innen brauchen einen eigenen Login oder eine Zuordnung. Das Video behandelt das nicht.
Note
Offen: Security ist laut Video "mit dem Experten nochmal zu sprechen" (Folge 111, 43:00). Die Einstufung als nachrangig ist bewusst, aber nicht bestätigt.

8.3 Test

Abgeleitet: Es gibt keinen Code und keine Tests. Das Konzept legt fest, wie Tests zu Stories und Qualitätsszenarien zurückverweisen, sobald es Code gibt.

  • Unit-Tests (Basis der Pyramide) prüfen die Logik der vier Module: Terminberechnung, Preisberechnung aus dem Protokoll, Bestandsführung, Zahlungsstatus. Jeder Test nennt die Story vom Board (Seite 1), die er absichert.

  • Integrationstests (Mitte) prüfen jede REST-Schnittstelle gegen einen Stub: Webshop User Database, Payment Service, Kasse, Rechnungswesen, EMail System, SMS Versand. Sie decken die Fehlerfälle aus 8.5 ab.

  • End-to-End-Tests (Spitze) laufen im Browser unter /reparatur mit einem JWT-Cookie und prüfen die Usability-Szenarien mit Zeitmessung: QS-U-02 (Reparatur beauftragen in 2 Minuten) ist mit der Stoppuhr messbar (Folge 111, V8, 49:30).

  • Betriebstests prüfen die Zuverlässigkeitsszenarien: Wiederanlauf QS-Z-02 (30 Minuten) und QS-Z-06 (5 Minuten), Datenverlust QS-Z-07 (5 Minuten, 99,9 %). Sie laufen als Chaos-Test gegen die Cloud-Umgebung.

  • Die Szenarien QS-U-03, QS-U-04, QS-U-05 und QS-U-06 sind Befragungen und Einarbeitungsmessungen, keine automatisierten Tests.

Note
Offen: kein Code, keine Tests. Testframework, Testdaten und Abdeckungsziel sind nicht festgelegt.

8.4 Observability

Abgeleitet aus den Verfügbarkeitsszenarien: Wer in 5 oder 30 Minuten wieder anlaufen will (QS-Z-02, QS-Z-06), muss den Ausfall zuerst bemerken. Der Shop hat keine IT-Experten (QS-U-07); die Alarmierung geht an den eigenen Support von außen (Board Seite 6). Folge 113 macht daraus eine Betriebsannahme (ADR-017): für die Ladenzeiten "eine Entwicklerin, die sich um das Thema kümmert", für das Web-System eine Rufbereitschaft rund um die Uhr, die "nachts um zwei" klingelt (40:16 bis 40:59).

Transkript Folge 113, 40:16 bis 40:59

zwischen 9 und 18 Uhr für die Sachen im Shop. Das wäre also etwas, wo ich noch sagen könnte, okay, wir haben halt irgendwie eine Entwicklerin, die sich um das Thema im Wesentlichen kümmern kann. Die kümmern sich eben um das jetzt mit. Hier wird es dann schwierig, weil das ist von 7 bis 24 Uhr und von 24 bis 7 Uhr, das ist also ein 24-7-Support. Das heißt, ich brauche jetzt hier irgendwie spätestens an dieser Stelle, brauche ich irgendwie einen 24-7-Support. Ich brauche jemanden, der in Rufbereitschaft ist. Und das bedeutet jetzt wieder ein ganz anderes Thema. Das bedeutet nämlich, dass ich tatsächlich jemanden haben müsste, der eben nachts um 2 Uhr sich rausklingeln lässt. Und das wird wahrscheinlich keine Entwicklerin sein.

  • Logs: Jede Anfrage unter /reparatur und jeder REST-Aufruf nach außen mit Zeitstempel, Modul und Ergebnis. Fehler der Schnittstellen aus 8.5 sind eigene Log-Ereignisse.

  • Metriken: Verfügbarkeit getrennt für Werkstatt- und Web-Teil, weil die Ziele verschieden sind (ADR-008): 99 % zwischen 9 und 18 Uhr, 99,9 % zwischen 7 und 24 Uhr, 99 % nachts. Dazu Antwortzeit der Statusseite und Zeit bis zur Preisermittlung (QS-Z-03, 2 Minuten).

  • Traces: Ein Auftrag lässt sich vom Webshop-Login über Terminplanung, Reparatur durchführen und Bezahlung bis zum Rechnungswesen verfolgen (Aufrufkette Board Seite 9).

  • Alarmierung: Ausfall des Web-Systems und der Werkstatt alarmiert den eigenen Support; nachts den 24/7-Support (QS-Z-05).

  • Audit: Protokollpositionen und Zahlungsstatus sind unveränderlich mit Urheber:in und Zeitstempel gespeichert. Das schließt T-003 und macht Übergaben an das Rechnungswesen nachvollziehbar.

Note
Offen: Werkzeuge für Monitoring und Alarmierung sind nicht gewählt. Das Betriebsmodell ist seit Folge 113 Cloud bei AWS (ADR-013); die Wahl EKS oder EC2 bleibt vertagt (ADR-014). Wer die Alarme entgegennimmt, ist entschieden: der eigene Support mit Rufbereitschaft (ADR-017).

8.5 Error Handling

Abgeleitet aus den Risiken der ADRs. Jeder Fall nennt Retry, Fallback und Recovery. Zwei Zeilen stützen sich auf das Video und sind so gekennzeichnet; eine dritte enthält einen Videobeleg im Fallback.

Fehlerfall Retry Fallback Recovery

Webshop oder Webshop User Database nicht erreichbar (R-002)

Adressabfrage per REST zweimal wiederholen, kurzer Timeout.

Login schlägt fehl; die Statusseite zeigt eine Wartungsmeldung. Werkstattfunktionen laufen weiter, weil sie kein Webshop-Login brauchen.

Sobald der Webshop antwortet, funktioniert der Login ohne Eingriff.

Kasse aus der Cloud nicht erreichbar (R-010, Board Seite 10; in Folge 113 als Risiko benannt, 24:38 bis 27:23)

Zahlungsstatus im Hintergrund erneut abfragen, mit wachsendem Abstand.

Shop-Mitarbeiter:in trägt die Bezahlung von Hand im Reparatursystem ein; der Auftrag bleibt bis dahin "bezahlt, unbestätigt". Videobeleg, nicht entschieden: Zuschauer Jan schlägt in Folge 113 einen Kassenproxy im Laden vor, für Eberhard "eine mögliche Lösung" (29:27; ADR-004, Kapitel 7).

Nachlaufender Abgleich mit der Kasse, sobald sie erreichbar ist; Widersprüche gehen an das Modul Bezahlung (R-011).

Payment-Redirect bricht ab (R-012)

Buchungsstatus per REST beim Payment Service nachfragen, auch ohne Rückkehr des Browsers.

Der Auftrag bleibt "Zahlung offen"; Kund:in kann erneut bezahlen oder im Laden zahlen.

Ein periodischer Abgleich holt bezahlte, aber nicht bestätigte Zahlungen nach.

EMail-Dienst fällt aus (R-020)

Versand in eine Warteschlange, Wiederholung bis der Dienst antwortet.

Die Statusseite zeigt "fertig" unabhängig von der E-Mail (ADR-005). SMS ist nicht gebaut (ADR-007).

Warteschlange leert sich, sobald der Dienst antwortet; keine Nachricht geht verloren.

Rechnungswesen aus der Cloud nicht erreichbar (Board Seite 10)

Rechnungselemente in eine Warteschlange, Wiederholung.

Reparatur und Bezahlung laufen weiter; das Rechnungswesen erhält die Elemente später.

Nachlieferung in Reihenfolge, idempotent.

Das eigene System im Shop fällt aus (QS-Z-02, QS-Z-03)

Kein Retry im System; der Wiederanlauf liegt beim Provider (EKS / EC2 SLAs, abgeleitet).

Videobeleg, nicht abgeleitet: Eberhard nennt in Folge 112 einen Low-Tech-Fallback (12:52 bis 14:35). Die Annahme von Reparaturen überbrückt der Laden 30 Minuten mit Zettel und Bleistift. Für den Preis bei Abholung schlägt er einen ausgedruckten Zettel am Fahrrad vor ("diese Reparatur hat übrigens 10 Euro gekostet") oder eine fest abgelegte Tabelle. Entschieden ist nichts: "da kann man sich was ausdenken".

Nach dem Wiederanlauf trägt die Werkstatt die Zettel nach (abgeleitet).

Netzausfall im Laden: Router oder Provider fällt aus (Folge 113, 08:24 bis 14:13)

Kein Retry im System; die Cloud läuft weiter, der Laden erreicht sie nicht (abgeleitet).

Videobeleg, nicht abgeleitet: akzeptiertes Risiko, mit dem Kunden zu besprechen. Als Reserve ein mobiler LTE/5G-Router mit automatischem Failover, "kostet einen Router und Netzwerktricks" (12:52 bis 13:02). Ein Cache-Server im Laden ist verworfen, weil er Wartung braucht und "deutlich mehr Geld" kostet (13:10 bis 13:21). ADR-018

Sobald das Netz steht, arbeitet der Laden ohne Eingriff weiter; die Daten liegen in der Cloud (abgeleitet).

Note
Offen: Circuit Breaker, Timeouts und Warteschlangen-Technik sind Vorschläge. Das Video behandelt Fehlerbehandlung an zwei Stellen: dem Ausfall des eigenen Systems in Folge 112 (12:52 bis 14:35) und dem Netzausfall im Laden in Folge 113 (08:24 bis 14:13).
Transkript Folge 112, 12:52 bis 14:35

Es steht spätestens nach 30 Minuten wieder zur Verfügung. Das heißt, die Annahme ist, dass man nur 30 Minuten mit Zettel und Bleistift überbrücken kann. Wo man jetzt noch irgendwie drüber diskutieren könnte, nicht? Ernsthaft? Wirklich? Ist das tatsächlich so? So, und dann könnte man halt eine Diskussion führen und könnte halt sagen, naja, okay, also wenn eine Reparatur angenommen wird, dann kann ich das vielleicht länger. Aber wenn ich das jetzt irgendwie abhole, muss ich ja dem Menschen das Geld abknöpfen. Dafür brauche ich halt diese Information. Aha, okay. Das heißt, ich könnte jetzt das nochmal weiter detaillieren und könnte halt sagen, okay, die Information, wie viel diese Reparatur tatsächlich gekostet hat, wenn das Fahrrad abgeholt wird, das ist sogar noch wichtiger. Das muss halt, da darf es halt höchstens zwei Minuten ausfallen oder so. Können wir jetzt auch aufschreiben, nicht spätestens nach zwei Minuten kann man den Preis einer erfolgten Reparatur wieder ermitteln. So, und jetzt habe ich wieder was fachlich über dieses System gelernt, nicht? Also Annahme von Reparaturen nicht so kritisch wie irgendwie dieses Ermitteln von dem Preis. Und eine profane Möglichkeit, das zu lösen, ist, dass ich halt an der Stelle, wo die Reparatur fertig ist, irgendwie so ein Ding ausdrücke, das halt ans Fahrrad kleben. Und da steht irgendwie dran, diese Reparatur hat übrigens zehn Euro gekostet. Dann hätte ich das halt in gewisser Weise erledigt. Oder ich habe irgendwo eine Tabelle, die fest abgelegt ist, wo das eben drauf drin steht oder weiß da drauf was. Da kann man sich halt was ausdenken, nicht? Also das kriege ich halt irgendwie hin.

Transkript Folge 113, 08:24 bis 14:13

Und das ist also dort eben ein Thema. Der Jan fragt jetzt, wenn das System in der Cloud läuft und der Router im Laden ausfällt, ist das System aus Sicht des Kunden nicht erreichbar. Wie adressieren wir das? Genau, damit sind wir so zwei Schritte weiter. Also erstmal bedeutet das, meine Lösungsstrategie wäre halt irgendwie Cloud. Und das, was der Jan jetzt irgendwie sagt, ist ja nachvollziehbar. Das heißt also, wenn ich jetzt sage, ich habe exakt einen Router bei diesem Fahrradladen, dann würde das eben dafür sorgen, dass, wenn der Router ausfällt, eben das gesamte System ausfällt. Also das ist die Strategie, die mir jetzt eigentlich eingefallen ist. Es muss ja auch nicht nur eine Cloud-Strategie sein. Es könnte auch sein, dass wir am externen Rechenzentrum das machen. Ich glaube auf jeden Fall, also ich persönlich würde jedenfalls ableiten, dass wir einen Server in dem Laden selber ausschließen können. Das heißt, wir müssen dann in der Netzwerkverbindung kommen und dann kommen wir eben zu dem Thema, was der Jan dort zitiert hat. Und das ist jetzt tatsächlich, finde ich, eine spannende Sache. Eine mögliche Antwort darauf wäre, ich entwickle ja irgendwie Software. Dass es einen Router gibt, der mir dafür sorgt, dass mein System nicht erreichbar ist, ist nicht mein Problem, was soll’s. Das finde ich nicht wirklich hilfreich. Und das ist auch nicht die Art und Weise, wie ich denke, wie man diese Qualitätsszenarien interpretieren sollte. Also das Qualitätsszenario sagt er jetzt nicht. Also das Qualitätsszenario sagt, das ist die Erwartungshaltung, die ein Kunde hat. Die ist da jetzt irgendwie formuliert. Das heißt, die Erwartungshaltung ist in diesem speziellen Fall, das System fällt aus. Und spätestens nach zwei Minuten kann man den Preis einer erfolgten Reparatur wieder ermitteln. Und jetzt gibt es halt bestimmte Szenarien, also zum Beispiel Ausfall der Netzwerkinterfrastruktur. Also zum Beispiel Ausfall eines Routers, aber auch zum Beispiel Ausfall eines Internetproviders und so weiter. Die mir jetzt dort wahrscheinlich ein Problem bereiten. Und meine Strategie dagegen wäre eigentlich zu sagen, naja, wir können jetzt eine Lösung bauen, die erwartungsgemäß das üblicherweise auf die Reihe bekommt. Ich bin da vielleicht noch etwas auf der glücklichen Seite. Ich weiß nicht, wann ich hier das letzte Mal einen Internetausfall hatte. Und für den Notfall habe ich halt irgendwie noch einen mobilen Router. Sowas könnte ich ja jetzt in dem Fahrradshop irgendwie auch machen. Ich könnte also sagen, okay, es gibt einen mobilen Router, der über LTE oder über 5G oder sowas eben die Internetverbindung zur Not redundant hält. Und ich habe dann eben einen festen Router. Und ich gehe davon aus, dass das halt üblicherweise funktionieren sollte. Aber an bestimmten Stellen ist es dann eben einfach vorbei. Also wenn jetzt irgendwie beide Router ausfallen oder wenn irgendwo in dem Stadtteil das Internet insgesamt von einem Provider ausfällt, weil irgendwo ein Teil der Netzwerkinfrastruktur auf einer anderen Ebene kaputt geht. Dann habe ich halt irgendwie habe ich ein Problem. Und das wäre jetzt etwas, was ich diskutieren würde. Glaube ich, offen mit dem Kunden und würde sagen, okay, wir haben dann das Risiko eines Netzwerkausfalls und wir können das versuchen zu lösen. Also wir könnten jetzt ein Stück Software bauen, was wir bei dir installieren in deinem Server, den du nicht hast. Und was wir, was dann in der Lage ist, diese Preise der erfolgten Reparaturen zu cashen. Das führt zu einer bestimmten Menge an Aufwand und Geld, das wir investieren. Wollen wir das tun? Sondern das ist, finde ich, ein valides Feedback. Also meine Aufgabe ist es, technisch zu bewerten, wie ich das umsetzen kann. Und die variable Größe dabei ist Preis eigentlich. Das heißt also, ich kann jetzt eben durch entsprechende Entwicklungsmaßnahmen, Infrastrukturmaßnahmen versuchen, das noch unwahrscheinlicher zu machen. Auch auf der Ebene von Dingen, die außerhalb meines Einflussbereichs sitzen. Also ich kann jetzt sagen, okay, wir können noch einen mobilen Router daneben stellen. Wir können eine Netzwerkinfrastruktur machen, die automatisch auf den mobilen Router zurückfällt. Wir können, das kostet halt irgendwie einen Router und Netzwerktricks. Das ist also wahrscheinlich nicht so wahnsinnig teuer. Wir können bei dir einen Server installieren, der in Cash ist, mit den Preisen der erfolgten Reparatur. Das würde bedeuten, wir installieren einen Server. Das würde bedeuten, wir müssen den irgendwie warten. Das kriegen wir schwierig hin, weil wir müssen innerhalb von 30 Minuten da sein, sagst du. Das kostet also deutlich mehr Geld. Ich kann es nicht genau beziffern, aber es kostet halt deutlich mehr Geld. Und da kann man, glaube ich, dann in eine offene Diskussion gehen. Meine Erwartungshaltung wäre, dass wir halt über einen Fahrradshop gehen und wir wahrscheinlich irgendwie da landen, dass man sagt, okay, dieses Risiko, dass die Verbindung zur Cloud abbricht, ist irgendwie akzeptabel. Und vielleicht bauen wir dann einen mobilen Router als Fallback ein. Das wäre etwas anderes, wenn wir über die Maschinensteuerung eines Atomkraftwerks reden oder sowas. Oder über die Produktionssteuerung in einer Fabrik, wo irgendwie der Ausfall des IT-Systems dazu führt, dass wir halt massive Verluste haben. Und das wäre, glaube ich, das, was man da sozusagen als Feedback liefern kann.

Hörprobe Folge 111

Folge 111 auf software-architektur.tv und Video auf YouTube. Die Zeitmarken im Text springen im Player an die Stelle. Audio: software-architektur.tv (Eberhard Wolff, Ralf D. Müller), Lizenz CC BY 4.0; für genaues Springen mit konstanter Bitrate neu kodiert.

Hörprobe Folge 112

Folge 112 auf software-architektur.tv und Video auf YouTube. Die Zeitmarken im Text springen im Player an die Stelle. Audio: software-architektur.tv (Eberhard Wolff, Ralf D. Müller), Lizenz CC BY 4.0; für genaues Springen mit konstanter Bitrate neu kodiert.

Hörprobe Folge 113

Folge 113 auf software-architektur.tv und Video auf YouTube. Die Zeitmarken im Text springen im Player an die Stelle. Audio: software-architektur.tv (Eberhard Wolff, Ralf D. Müller), Lizenz CC BY 4.0; für genaues Springen mit konstanter Bitrate neu kodiert.