[RFC] H.265 Frame-Parser

  • Hallo zusammen

    Ich habe mal versucht, dem VDR H.265 beizubringen und den notwendigen Frame-Parser implementiert. Die Testmöglichkeiten sind mangels passendem Ausgabeplugin noch gering, aber nun wäre wenigstens mal das Huhn-Ei-Problem (passend zu Ostern) gelöst. Ich kann jedenfalls von "Astra H265 Tests" aufnehmen und auch bei einer kommerziellen UHD-Aufnahme konnte ich einen Index generieren.

    Vielleicht hat einer der Codec-Cracks ja mal Lust, den Patch mal anzuschauen. Ich habe mich nur flüchtig in die Norm eingelesen, aber so wie ich das sehe, wurden bei H.265 ein paar Sachen vereinfacht. So gibt es z.B. ein First-Slice-in-Pic-Flag und auf interlaced-Material wurde (endlich!) verzichtet.

    Gruss
    Thomas

  • Super, dass ein Anfang gemacht wird.

    Mal ein kurzer einseitiger Brainstorm, was noch gemacht werden muß:

    Ausgabeplugin (softhddevice)
    streamdev
    xvdr

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ist das so korrekt?

    Code
    +cH265Parser::cH265Parser(void) :
    +  cH264Parser()
    +{
    +}


    oder sollte es nicht so lauten?

    Code
    +cH265Parser::cH265Parser(void) :
    +  cH265Parser()
    +{
    +}
    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Danke für die Info C++ ist nicht so mein Ding

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich habe mal versucht, dem VDR H.265 beizubringen und den notwendigen Frame-Parser implementiert.

    Super, endlich geht es etwas los und es wird daran gearbeitet, dem VDR fit zu machen für den neuen Videocodec h.265 (HEVC). :]

    Der neue Videocodec h.265 (HEVC) wird ja nicht nur bei UHD-Sendern verwendet, sondern auch ab dem 31. Mai bei dem Pilotkanal für das zukünftige DVB-T2 HD.
    Siehe dazu auch hier ein paar weiterführende Infos DVB-T2 HD: Testbetrieb startet im Mai

    Paulaner

    meine aktuelle Hard- und Software

    Heimkino: . . . . . . . AVR Denon AVR-X4800H . . . MiniLED-UHD-TV SONY BRAVIA XR-75X95L. . . Universal-FB: Sofabaton U2
    VDR-Hardware: . . Grafik MSI GT1030, Quad-DVB-C/T2 TBS-6205, Quad-DVB-S2/S2X TBS-6904SE

    VDR-Software: . . . yaVDR-ansible-noble - Kernel 6.08.0 - VDR-2.7.x - nvidia-550
    VDR-Client 1+ Media-Player: . . . Odroid N2 . 4GB mit VDR*ELEC Kodi-21.x + VDR-2.7.x_@Zabrimus
    VDR-Client 2+ Media-Player: . . . Dune HD Homatics Box R4K Plus . 4GB mit Kodi-21.x + VDR-2.7.x_@Zabrimus

  • Ich hab's mit einem Quick'n'Dirty Patch vom streamdev-server getestet, und kann sagen:
    Der Parser funktioniert! Ich bekomme ein Bild mit mplayer als Stream im TS format.

    Bei PES füllt sich der Buffer mit dem schnell-schnell Patch nicht. Genauer habe ich mir das aber noch nicht angesehen.

    Getestet habe ich folgende Sender:

    Code
    PEARL TV 4K UHD;:12344:HC23M5O35P0S1:S19.2E:30000:2815=36:0;2816=deu@3:0:0:2010:1:1043:0
    Insight UHD;:12344:HC23M5O35P0S1:S19.2E:30000:255=36:0;256=deu@3:0:0:2000:1:1043:0
  • Vielen Dank für das Ostergeschenk,
    und deiner Arbeit in Sachen VDR. :)

    Leider ist HVEC/4k bei mir Hardwareseitig noch nicht wirklich brauchbar.
    Weiters habe ich auch einen kurzen Blick auf das VNSI-Plugin gemacht, das braucht wie's aussieht einen eigenen Parser, und wird somit aufwendiger.

  • Hallo zusammen

    Der Parser scheint zu funktionieren. Mit einem gehackten Prototyp des amlhddevice-Plugins kann ich auf einem Odroid C2 eine Aufnahme von "Astra H265 Tests" abspielen und Schnittmarken anspringen und verschieben. Live-TV habe ich leider weder mit streamdev noch satip ans Rennen gekriegt - evtl. müssen die Plugins noch angepasst werden.

    Allerdings ist meine libamcodec auf dem Odroid C2 ein ziemliches Gebastel, beim Zurücklesen der Audio-Pts crasht z.B. VDR weil über Array-Grenzen geschrieben wird. Leider hat Hardkernel noch keine offizielle 64-Bit-Version herausgebracht, meine Sourcen sind deshalb ein Mix von Codesnake's Repo und einem, Zitat: "early hack", von hier. Momentan also immer noch eine Grossbaustelle an der Amlogic-Front, der ffmpeg-Ansatz auf dem Raspberry Pi scheint mir momentan erfolgsversprechender...

    Gruss
    Thomas

  • Was mir aufgefallen ist.

    Laut Doku sind nuh_layer_id + nuh_temporal_id_plus1 = 9 bit

    Code
    nal_unit_header( ) {
        forbidden_zero_bit        :f(1)
        nal_unit_type                 :u(6)
        nuh_layer_id                   :u(6)
        nuh_temporal_id_plus1  :u(3)
    }

    Du machst aber nur ein GetByte()
    Dadurch dürfte Dein first_slice_segment_in_pic_flag um ein bit daneben liegen.

    Oder liege ich da falsch?

    Meine VDRs

    VDR Server: Ubuntu Lucid Lynx mit 6TB im RAID und quadtuner DVB-S2
    VDR Client1: Raspbian @ Raspberry Pi 2
    VDR Client2: Ubuntu @ Laptop
    VDR Client3: MDL @ Raspberry Pi
    VDR Client4: zen2vdr @ SMT-7020s (wird zZ nicht benutzt)
    VDR Client5: Android @ HP Touchpad mit VDR Manager App


    [Blocked Image: http://decembersoul.dd-dns.de/~patrick/signatur_vdr.php]

  • Was mir aufgefallen ist.

    Laut Doku sind nuh_layer_id + nuh_temporal_id_plus1 = 9 bit

    Code
    nal_unit_header( ) {
        forbidden_zero_bit        :f(1)
        nal_unit_type                 :u(6)
        nuh_layer_id                   :u(6)
        nuh_temporal_id_plus1  :u(3)
    }

    Du machst aber nur ein GetByte()
    Dadurch dürfte Dein first_slice_segment_in_pic_flag um ein bit daneben liegen.

    Oder liege ich da falsch?

    Ein Bit der Layer ID geht beim parsen des NAL Unit Types "verloren", das sollte daher schon passen.

    Gruss
    Thomas

  • channels.conf für Rhein/Main:

    Code
    Das Erste HD:778000:B8G16M64P0Q7766S1T32X0:T:27500:1361=36:0;1362=deu@122:1366;1369=deu:0:769:8468:16481:0
    ZDF HD:778000:B8G16M64P0Q7766S1T32X0:T:27500:1377=36:0;1378=deu@122:1382;1385=deu:0:16961:8468:16481:0

    Die Privaten sind verschlüsselt und senden damit unter Ausschluss der Öffentlichkeit

    Anbei noch ein Patch für streamdev

    Files

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • jsffm
    Danke für den Streamdev patch, der funktionierte auf Anhieb.
    Werde den in den nächsten Tagen noch etwas ausführlicher testen.

    Mein erster Versuch streamdev zu patchen hat nur hin und wieder zu einer Bildausgabe geführt, mir haben da wie es aussieht zwei notwendige Zeilen gefehlt.
    Deshalb hatte ich den Patch auch nicht gepostet.


    Mit freundlichen Grüßen,
    z421 :)

  • PES streaming funktioniert mit dem streamdev patch noch nicht.

    Da schreibt der VDR im Log immer folgende Meldungen:

    Quote

    May 3 14:22:59 tvserver vdr: [1217] ERROR: unknown picture type '4'
    May 3 14:22:59 tvserver vdr: [1217] ERROR: unknown picture type '5''
    May 3 14:22:59 tvserver vdr: [1217] ERROR: unknown picture type '6'
    May 3 14:22:59 tvserver vdr: [1217] ERROR: unknown picture type '7'


    Je "unknown picture type" Nummer sind's jeweils ca. 25 Log Einträge

  • Bei mir treten die Fehlermeldungen nicht auf, kannst Du Deine Testbedingungen etwas genauer beschreiben?

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Bei mir treten die Fehlermeldungen nicht auf, kannst Du Deine Testbedingungen etwas genauer beschreiben?


    Kanaleintrag aus der channels.conf

    Code
    PEARL TV 4K UHD:12344:HC23M5O35P0S1:S19.2E:30000:2815=36:2816=deu@3:0:0:2010:1:1043:0


    UHD streaming funktioniert mit:

    Quote

    mplayer http://10.10.10.39:3000/TS/S19.2E-1-1043-2010.ts


    UHD streaming funktioniert nicht mit:

    Quote

    mplayer http://10.10.10.39:3000/PES/S19.2E-1-1043-2010.ts

  • PES habe ich nicht getestet.

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Wunderbar, mit diesem Patch kann VDR auch UHD1 entschlüsseln:

    Code
    UHD1 by ASTRA / HD+;SES ASTRA:10993:hC56M5O35S1:S19.2E:22000:0:102=deu@3:0:1830,1843,1860,186A:2:1:1035:0


    Streaming funktioniert mit MPC-HC 1.7.10

    Vielen Dank!

  • Ich hab mal versucht hier den derzeitigen Stand von HEVC-Support zusammenzufassen.

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich hab mal versucht hier den derzeitigen Stand von HEVC-Support zusammenzufassen.

    Danke für die Mühen, aber sind nicht die Hardwareangaben etwas zu allgemein bzw. verleiten dazu anzunehmen, dass mehr geht als tatsächlich möglich ist?

    Skylake kann unter Linux nur 8bit 4k Material hardwarebeschleunigt dekodieren, 10bit geht nur über die CPU, und bei den Grafikkarten ist die Auswahl mit 10bit support derzeit noch auf einige wenige Nvidia Karten beschränkt. Es ist wichtig, zu wissen dass UHD über DVB-S2 in der Regel 10bit Material ausstrahlt.

    Details dazu:
    http://www.astra.de/18049106/ultra-hd

    Die Sender:

    • UHD1 by Astra / HD+
    • pearl.tv UHD 4K
    • Fashion 4K
    • Insight

    senden HEVC Main 10, 2160 50p.

    Skylake kann HEVC nur in 8bit & 30Hz via HDMI 1.4.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!