|
|
| Datum | Beschreibung | Author | Status |
|
|
|
|--------|-------------------------|--------|--------|
|
|
|
|-------|--------------|--------|--------|
|
|
|
| 2022-02-25 | Erstversion mit Input von Hackathon 21 | David | Draft |
|
|
|
| 2022-03-11 | Details zu Tank & Steering | Ernesto | Draft |
|
|
|
| 2022-05-04 | Erstes Team Review | Ernesto, Christian, Ole, David | Draft |
|
... | ... | @@ -7,7 +7,7 @@ |
|
|
|
|
|
## EPIC
|
|
|
|
|
|
[[EPIC] [AEP01] Recording, cutting and rescheduling of shows)](https://gitlab.servus.at/aura/meta/-/issues/97)
|
|
|
[\[EPIC\] \[AEP01\] Recording, cutting and rescheduling of shows)](https://gitlab.servus.at/aura/meta/-/issues/97 "[EPIC] [AEP01] Recording, cutting and rescheduling of shows")
|
|
|
|
|
|
## Use Cases:
|
|
|
|
... | ... | @@ -76,6 +76,8 @@ Entwicklung einer neuen Python Komponente <span dir="">`engine-recorder`</span> |
|
|
|
|
|
Entwicklung einer neuen Python Komponente <span dir="">`tank-cut-glue`</span> um aus den Aufnahme Blöcken aus <span dir="">`engine-recorder`</span> konkrete Sendungslängen zuzuschneiden. Die Komponente soll als User Agent ausgeführt werden.
|
|
|
|
|
|
Ein erster Komponenten Entwurf sieht wie folgt aus: ![Component_Diagram_cut_glue.drawio.svg](uploads/dcfc2b2c6744d9c062aaeebee7265b6b/Component_Diagram_cut_glue.drawio.svg)
|
|
|
|
|
|
**Authentifizierung**: Cut & Glue authentifiziert sich gegen Tank per _Bearer Token_ (vgl. Implementierung in <span dir="">`engine`</span>)
|
|
|
|
|
|
**Kernlogik:**
|
... | ... | @@ -98,23 +100,23 @@ Nachstehend finden sich zwei Proof of Concepts mit FFMPEG und SOX. Wenn möglich |
|
|
|
|
|
Schneiden:
|
|
|
|
|
|
`ffmpeg -i `[`https://live.helsinki.at:8088/live160.ogg`](https://live.helsinki.at:8088/live160.ogg)` -codec flac -f segment -segment_atclocktime 1 -segment_time 600 -strftime 1 "%Y-%m-%d/%s.flac"`
|
|
|
`ffmpeg -i` `https://live.helsinki.at:8088/live160.ogg` `-codec flac -f segment -segment_atclocktime 1 -segment_time 600 -strftime 1 "%Y-%m-%d/%s.flac"`
|
|
|
|
|
|
Mehr Infos zum FFMPEG Segment Muxer: <https://ffmpeg.org/ffmpeg-formats.html#toc-segment_002c-stream_005fsegment_002c-ssegment>
|
|
|
Mehr Infos zum FFMPEG Segment Muxer: https://ffmpeg.org/ffmpeg-formats.html#toc-segment_002c-stream_005fsegment_002c-ssegment
|
|
|
|
|
|
#### **Proof of Concept mit SOX**
|
|
|
|
|
|
Schneiden:
|
|
|
|
|
|
`` sox input.flac chopped/output.flac trim 0 10 : newfile : restart` ``
|
|
|
`sox input.flac chopped/output.flac trim 0 10 : newfile : restart\``
|
|
|
|
|
|
`ls chopped output001.flac output003.flac output005.flac output007.flac output009.flac output011.flac output013.flac output015.flac output017.flac output019.flac output021.flac output023.flac output025.flac output027.flac output029.flac output031.flac output002.flac output004.flac output006.flac output008.flac output010.flac output012.flac output014.flac output016.flac output018.flac output020.flac output022.flac output024.flac output026.flac output028.flac output030.flac`
|
|
|
|
|
|
Concatten mit μs genauem Längenvergleich:
|
|
|
|
|
|
`sox chopped/* final.flac`
|
|
|
`sox chopped/\* final.flac`
|
|
|
|
|
|
`A=$(soxi -D input.flac) `\
|
|
|
`A=$(soxi -D input.flac)` \
|
|
|
`B=$(soxi -D final.flac)`\
|
|
|
`echo "INPUT: $A ---vs--- $B :OUTPUT"`\
|
|
|
`INPUT: 307.600000 ---vs--- 307.600000 :OUTPUT`
|
... | ... | @@ -142,33 +144,19 @@ Die Aufnahme soll möglichst zeitnah nach einer Sendung bereitstehen für |
|
|
_Hackathon Freistadt Juli 2021: Im Moment ist bei Wiederholungen nicht erkennbar, was wiederholt wird (aktuell: die letzte Episode der Reihe, die keine Wiederholung war). (Implizite Logik)\
|
|
|
In Zukunft wird das explizit angegeben. (Kein UI-Feld, sondern intern)_
|
|
|
|
|
|
Wir haben jetzt ein `is_repetition`-Feld bei den Schedules und eins bei den
|
|
|
Timeslots.
|
|
|
Wir haben jetzt ein `is_repetition`-Feld bei den Schedules und eins bei den Timeslots.
|
|
|
|
|
|
Im Schedule bedeutet dass der Sendeplatz die Wiederholung einer Sendung ist, im
|
|
|
Timeslot bedeutet dass diese eine Timeslot eine Wiederholung ist. Aber beide
|
|
|
haben keine Information darüber was wiederholt wird.
|
|
|
Im Schedule bedeutet dass der Sendeplatz die Wiederholung einer Sendung ist, im Timeslot bedeutet dass diese eine Timeslot eine Wiederholung ist. Aber beide haben keine Information darüber was wiederholt wird.
|
|
|
|
|
|
Ich denke wir könnten bei den Timeslots das Feld `repetition_of` einführen, der
|
|
|
dann eine ForeignKey auf ein Timeslot ist. (`is_repetition` könnten wir dann
|
|
|
entfernen.)
|
|
|
Ich denke wir könnten bei den Timeslots das Feld `repetition_of` einführen, der dann eine ForeignKey auf ein Timeslot ist. (`is_repetition` könnten wir dann entfernen.)
|
|
|
|
|
|
Damit würde würde dann der Tank wissen, dass für diesen Timeslot nicht eine
|
|
|
Playlist oder Datei braucht sondern aus den Aufnahmen die Zeit von Start bis
|
|
|
Ende des Timeslots, der wiederholt wird, holen muss und diese Aufnahme dann
|
|
|
speichert.
|
|
|
Damit würde würde dann der Tank wissen, dass für diesen Timeslot nicht eine Playlist oder Datei braucht sondern aus den Aufnahmen die Zeit von Start bis Ende des Timeslots, der wiederholt wird, holen muss und diese Aufnahme dann speichert.
|
|
|
|
|
|
Mir ist es lieber wir habe explizite Information darüber was wiederholt wird
|
|
|
und nicht implizit dass es die letzte Aufnahme einer nicht als Wiederholung
|
|
|
gekennzeichnetes Timeslots.
|
|
|
Mir ist es lieber wir habe explizite Information darüber was wiederholt wird und nicht implizit dass es die letzte Aufnahme einer nicht als Wiederholung gekennzeichnetes Timeslots.
|
|
|
|
|
|
Wir müsste dann nur im Dasboard den Timeslot als Wiederholung definieren. Und
|
|
|
das für jeden Timeslot der eine Wiederholung ist.
|
|
|
Wir müsste dann nur im Dasboard den Timeslot als Wiederholung definieren. Und das für jeden Timeslot der eine Wiederholung ist.
|
|
|
|
|
|
Um es auf Schedule-Ebene zu ermöglichen, könnten wir etwas ähnliches machen und
|
|
|
ein `repetition_of`-Feld definieren, dar dann eine ForeignKey auf Schedule ist,
|
|
|
wir würden aber etwas zusätliches brauchen, um explizit zu definieren, was wann
|
|
|
wiederholt wird.
|
|
|
Um es auf Schedule-Ebene zu ermöglichen, könnten wir etwas ähnliches machen und ein `repetition_of`-Feld definieren, dar dann eine ForeignKey auf Schedule ist, wir würden aber etwas zusätliches brauchen, um explizit zu definieren, was wann wiederholt wird.
|
|
|
|
|
|
… **_to be discussed …_**
|
|
|
|
... | ... | |