VDR-Plugin Permashift

See this page for English version.

Dies ist die Homepage des Plugins Permashift für den Video Disc Recorder (VDR). Das Plugin realisiert eine einfache Form des permanenten Timeshift, sodass der Zuschauer (fast) jederzeit innerhalb des Live-Programms, das er gerade gesehen hat, zurückspulen kann, oder eine Sofortaufnahme starten kann, die das schon Gesehene beinhaltet. Das wird erreicht, indem das Programm vorsorglich automatisch auf Festplatte aufgenommen wird.

Die aktuelle Version von Permashift ist 0.5.4. Sie behebt im Vergleich zur Vorversion Probleme beim Herunterfahren nach Inaktivität oder durch die Power-Taste.

Ohne Gewähr

Permashift wird Aufnahmen löschen. Nach bestem Wissen und Gewissen nur die, die es selbst angelegt hat. Aber ich übernehme keine Gewähr für nichts. Andererseits… ich habe das Plugin natürlich ausgetestet und es läuft auch schon länger auf meinem Wohnzimmer-System. Meine eigenen Aufnahmen vertraue ihm also an.

Permashift wird auch aufnehmen. Viel aufnehmen. Während man live fernsieht die ganze Zeit, und wenn der VDR sich danach nicht abschaltet noch die eingestellte Anzahl an Stunden ab dem letzten Umschalten. HD-Fernsehen kann schon mal 12 MBit und mehr erfordern, das wären pro Stunde über 5 GB Daten. Die c’t überschlägt die Haltbarkeit von SSDs bei einer Belastung von 20 GB (umgerechnet also vier Stunden live HD-Fernsehen) pro Tag. Auch hier: Ich halte das für unproblematisch, aber Benutzung auf eigene Gefahr.

Voraussetzungen

Das Plugin ist auf kleine Änderungen am VDR-Hauptprogramm angewiesen. Ich habe diesen Patch so minimal-invasiv wie möglich gehalten.

VDR-Patch

Der Patch passt zum Quellcode von VDR 2.0.2. Dank der Flexibilität des Patch-Mechanismus sollte er auch bei anderen aktuellen Versionen unverändert funktionieren.

Anwendung

Aus Benutzersicht sollte das Plugin unauffällig seinen Dienst verrichten. Der Anwender bemerkt davon nur, dass im Hauptmenü eine Aufnahme des aktuellen Programms verzeichnet ist, die er nicht selbst gestartet hat. In den Optionen kann man einstellen, wie lang eine Timeshift-Aufnahme werden kann (zwischen 1 und 23 Stunden). Außerdem kann man das Plugin deaktivieren. Die (wenigen) Texte des Plugins gibt es in Deutsch und Englisch.

Durch Drücken der Pause-Taste kann man aus dem Liveprogramm in den Wiedergabemodus wechseln. Zum Zurückspulen muss man dann das Programm erst wieder starten (Play), bevor man spulen kann (Rewind).

Alternativ kann man wie gewohnt eine Sofortaufnahme anlegen. Diese beinhaltet dann das bisher Gesehene und hat ab dem Anlege-Zeitpunkt gerechnet die in den VDR-Optionen ausgewählte Länge (voreingestellt sind drei Stunden).

Die Aufnahme für das permanente Timeshift bekommt eine negative Priorität, so dass sie weder einer anderen Aufnahme noch dem Umschalten auf ein beliebiges Programm im Wege steht. Wird eine Aufnahme für eine Pause oder eine Sofortaufnahme verwendet, geht die Verantwortung für die Aufnahme an VDR über. Ob eine Pause-Aufnahme gelöscht wird, hängt ab diesem Zeitpunkt von der entsprechenden Option des VDR ab (Aufnahme => Zeitversetzte Aufnahme löschen).

Download

Nach all der Vorrede hier also das Plugin. Es muss selbst kompiliert werden (Anleitung). Das Plugin verwendet seit Version 0.5.2 das Makefile-System, das mit der VDR-Version 1.7.34 eingeführt wurde. Für ältere Versionen liegt eine Kopie des alten Makefiles bei.

Plugin
Troubleshooting
Ausgaben bei Aufnahmen

Es ist nicht sinnvoll, VDR Informationen zum Start und Stopp von Aufnahmen ausgeben zu lassen, wenn man Permashift nutzt. Da das Plugin bei jedem Umschaltvorgang eine Aufnahme stoppt und eine neue startet, würde man so je zwei neue Ausgaben bekommen, die man eventuell dann auch bestätigen müsste. Das würde das Zapp-Vergnügen doch ziemlich beeinträchtigen. Gen2VDR scheint Anfang und Ende einer Aufnahme zu verkünden, und das Plugin Markad tut das optional ebenfalls. Den Nutzern würde ich empfehlen, diese Ausgaben vorerst wenn möglich abzuschalten. Die Entwickler könnten darüber nachdenken, die Ausgabe oder im Falle von Markad vielleicht die gesamte Funktionalität auf Aufnahmen zu beschränken, die mindestens die Priorität einer Pause-Aufnahme haben – dann kämen die Funktionen sich mit Permashift nicht in die Quere.

Scripte bei Aufnahmen

Die Ausgaben von Gen2VDR werden über das Script /etc/vdr.d/scripts/g2v_record.sh angestoßen. Auch andere VDR-Systeme könnten bei Aufnahmen ein Script starten. Der VDR-Parameter dazu ist “-r” beziehungsweise “–record”.

Ingo Prochaska, der dankenswerterweise eine Vorabversion des Plugins getestet hat – und prompt auf mehrere Probleme gestoßen ist, die bei mir nicht aufgetreten waren – hat vorgeschlagen, das Script für Live-Aufnahmen (und damit auch die von Permashift) wie folgt abzuklemmen:

if [ "${PLUGINS/* permashift */}" = "" ] ; then
   if [[ $2 == /video/@* ]] ; then
     exit 0
   fi
fi

Damit wird natürlich alles andere, was das Script so machen mag, für Live-Aufnahmen ebenfalls nicht ausgeführt.

Arbeitsweise

Das Plugin startet beim Umschalten eine Aufnahme mit der eingestellten Länge und merkt sich den dazugehörigen Timer. Beim nächstem Umschalten wird eine zu diesem Timer gehörige Aufnahme gestoppt und gelöscht. Durch den Umweg über den Timer wird berücksichtigt, dass das VDR-System unter Umständen eine Aufnahme stoppt und neu startet, wenn sich Programmdaten geändert haben. Die Aufnahmen haben eine besonders niedrige Priorität, so dass sie beim Umschalten nicht den Empfänger blockieren.

Wenn VDR eine Pause- oder Sofort-Aufnahme starten soll, sucht es dank des Patchs nach einer schon laufenden Aufnahme, die es wiederverwerten kann. Stößt es dabei auf eine durch Permashift angestoßene Aufnahme (unter Umständen können auch andere Aufnahmen verwendet werden), wird diese so angepasst, dass sie den Erwartungen des Benutzers entspricht. Sofortaufnahmen werden and die erwartete Länge ab dem aktuellen Zeitpunkt verlängert, Pause-Aufnahmen nur ggf. verlängert. Bei einer Sofortaufnahme werden außerdem Priorität und Lebenszeit hochgesetzt. (Das Plugin erkennt dann die hochgesetzte Priorität und löscht die Aufnahme nicht.)

Beim Abschalten des Systems wird die letzte Aufnahme gestoppt und die veränderten Timer-Daten in die Konfigurationsdatei geschrieben. Wird die Aufnahme gar nicht gestoppt, läuft sie nach der konfigurierten Zeit aus und wird anschließend gelöscht. Wenn das Plugin feststellt, dass die vom Benutzer eingestellte Inaktivitätszeit abläuft, wird der Benutzer gefragt, ob die Permashift-Aufnahme fortgesetzt werden soll. Wird das nicht bestätigt, wird die Aufnahme beendet und steht so dem Herunterfahren nicht mehr im Weg.

Aussicht

Der Timeshift ist mit bis zu 23 Stunden inzwischen beinahe permanent. Bevor man noch längeres Aufnehmen einbauen würde, müsste man sich zuvor im die Verkürzung am Anfang der Aufnahme kümmern, da vermutlich weder Plugin noch der Rest des VDR mit Aufnahmen über 24 Stunden zurechtkommen.

Außerdem überlege ich, direktes Zurückspulen vom Live-Programm aus einzubauen. Andererseits wird so der Übergang von Live-Modus in den Wiedergabemodus, der mit einer Änderung der Tastenbelegung verbunden ist, verschleiert.

Kommentare?

Ich freue mich über Kommentare! Wenn du es ausprobiert hast, schreib mir. Egal ob es funktioniert hat oder nicht. Wenn du Änderungs- oder Erweiterungsvorschläge hast, schreib mir. Wenn du mehr Optionen benötigst, schreib mir. Wenn du findest, dass Permashift einen Ringbuffer von festlegbarer Länge verwenden sollte… dann hast du wohl recht, aber das kann ich eher nicht versprechen. Schreiben kannst du’s natürlich totzdem gerne.

20 Gedanken zu „VDR-Plugin Permashift“

  1. Hallo Eike,

    ich experimentiere zur Zeit mit MLD auf 2 Raspberry Pis – einer als Client und einer als Server – und bin ganz “scharf” auf Permashift. Neuerdings wird das bei MLD auch angeboten, aber ich glaube ich verstehe die Funktionweise noch nicht genau.
    Ich nutzt DVB-T – Sticks am Server – die Aufnamen landen auf einer Platte am Server.

    1. Wo wird Permashift installiert? Server oder Client.
    2. Wenn es auf dem Client istelliert werden muß, wo landen da die Timeshiftdaten? Auf dem Server?

    Gehen die Daten erst vom Server zum Client und dann wieder zurück zum Server um dort gespeichert zu werden?

    Dann würde ja ein extra datenspeicher am Cleint sinnvoll sein. Weil der Pi hat ja nicht so viel Speicher.

    Kannst du helfen?

    Gruss,
    Andre

    1. Hallo Andre,

      ich habe leider keine Ahnung vom Einsatz von Permashift in einem Client-Server-Szenario. Meine Vermutung wäre ja, dass Permashift auf dem Server laufen und der Client gar nichts davon merken sollte, aber so einfach scheint es wohl nicht zu sein. Du bist aber nicht der einzige, der sich für das Thema interessiert. Ich würde vorschlagen, dass du einen Thread auf vdr-portal.de dazu öffnest. Übrigens ist Permashift gerade in einer (leider viel zu langen) Übergangsphase: Ich habe im Vdr-Portal eine Testversion veröffentlicht, die direkt in den Speicher statt auf Festplatte aufnimmt.

      Ciao,
      Eike

  2. Hallo,

    ich komme aus der Welt der Dreamboxen, hab persönlich noch eine 7025 SD Box, im “support” einige 800se und 7020HD und möchte mich nun weiter entwickeln und für mich VDR nutzen. Ich bin gerade dabei mich rein zu arbeiten. Einige Bedienungstechnische Unwegsamkeiten suche ich noch, wird aber werden. Auch eine Fernbedienung gibt es noch nicht. Bin mir da noch unschlüssig was ich nehme.

    Das Killerfeature bei der ganzen Sache ist allerdings das Timeshift und dessen Kompfort. Ich hab vdr-plugin-permashift aus ppa:gandalf-der-grosse installiert.

    Ich würde dir gern mal beschreiben wie es bei der Dream gelöst wurde. Vielleicht kannst du da einiges übernehmen.

    Als erstes hier mal die Einstellmöglichkeiten: http://i37.photobucket.com/albums/e67/humsat/screenshots_plugins/PermanentTimeshift.jpg

    Wichtig hierbei meiner Meinung nach der Delay in s ab wann die Timeshift Aufnahme nach dem Umschalten beginnen soll. Das Problem ist das er im Moment beim Zappen ständig auf der Platte rumwerkelt obwohl sich noch keiner für einen Kanal entschieden hat. Das könnte das System und die Festplatte entlasten.
    Das ganze in Events/Sendungen auf zu teilen finde ich bei der Dream etwas ungünstig, beim zurück spulen und zeitversetzten Sehen gibt es zwischen den Sendungen kurze Unterbrechungen an den Stellen wo laut EPG eine neue Sendung begonnen hat, weil eine Aufnahme/Ausgabe beendet wird und sofort eine neue Aufnahme/Ausgabe gestartet wird.

    Ein anderen Speicherort in den Einstellungen/Cfg festlegen wäre auch eine klasse Sache, sonst sieht ja keiner mehr durch. Den Ordner würde ich dann bei jedem Neustart noch zusätzlich leeren. Letztens war Stromausfall und auf meiner Dream blieben TS-Aufnahmereste über und es funktionierte kein TS, außerdem kam eine Fehlermeldung auf dem TV. Durch das leeren beim Start würde sich das Problem mit den verweißten Aufnahmen durch Bedienfehler minimieren.

    Die Idee mit dem RAM ist nicht schlecht nur bei HD TV ist der übel schnell voll und einen Ringspeicher im Linux zu programmieren, da haben die sich bei der Dream schon schwer getan, zumindest hab ich das mal irgendwo gelesen.

    Dann wäre so ein Menu Gold Wert, http://www.dreambox-blog.com/index.php/5701/permanent-timeshift-1-1-bringt-unterstuetzung-fuer-release-3-2-images, alles klar verständlich für die besseren Hälften die mit zurückspulen und Timer setzen und hin und her etwas unsicher sind ob die das Richtig machen.

    Wichtig wäre auch mit nur einem Tastendruck (meinetwegen Stop oder Exit) in die Live Zeit zu springen um dann umschalten zu können, ohne eine neue Timeshiftaufnahme zu starten. Mit der Zurück-Taste springt der im Moment in das Timermenu und die Aufnahme bleibt unter Aufzeichnungen erhalten. Ich glaube aber das dies eher ein Problem des VDR und nicht des Plugins ist.

    Für die Schönheit wäre es schick das Rec Symbol nicht blinken zu lassen.

    Ansonsten finde ich es gut das sich jemand darum kümmert Permanentes TS wird immer etwas stiefmütterlich behandelt. Leider bin ich nicht in der Lage so was mit humanem Aufwand selber auf die Beine zu stellen. Man kann halt nicht alles…

    So long..

    1. Hallo Nico,

      danke für das ausführliche und konstruktive Feedback, find ich klasse!

      Mir ist schon bewusst, dass der aktuelle Zustand von Permashift nicht optimal ist. Eigentlich hab ich das fast permanente Timeshift mit einem billigen Trick erreicht. Ich bin daher derzeit dabei, eben doch die Ringspeicher-Lösung zu bauen. Das hätte viele Vorteile, von deutlich weniger Belastung von Platte und System bis hin zum nicht mehr blinkenden Aufnahme-Symbol. Der Ringspeicher selbst ist nicht schwer, das war zu meiner eigenen Überraschung an einem Nachmittag runterprogrammiert. Was mir sehr schwerfällt, ist der nahtlose Übergang von dem, was in den Speicher aufgenommen wurde, zu dem, was beim Anstoßen einer richtigen Aufnahme auf der Festplatte landet. Da sitze ich jetzt schon länger dran, und ich hab als einer, der beruflich programmiert, halt auch nicht jeden Tag Zeit und Motivation, mich nach Feierabend noch dranzusetzen. Aber… ich arbeite daran, und dann sollte der eine oder andere Wunsch erfüllt sein oder sich leichter erfüllen lassen.

      Ciao,
      Eike

  3. Hallo Eike,

    mir fehlte diese Funktion schon sehr und ich habe diese bei mir mal eingebaut. Was ich aber unpraktisch finde, ist wenn ich im Abspielmodus vom Buffer bin und die Bufferwiedergabe mit “Stop” verlasse, wird der Buffer gelöscht und es startet ein neuer. Es sollte nur beim Senderwechsel praktischerweise ein neuer Buffer starten.

    Oliver

    1. Hallo!

      Das irritiert mich ehrlich gesagt auch selbst regelmäßig in der Benutzung. Ich werd mir das mal ankucken. Aber derzeit bin ich dabei, Permashift komplett umzukrempeln (wenn ich nach einem Tag des beruflich Programmierens denn mal Zeit und Lust habe), von daher muss das Problem noch warten.

      Ciao,
      Eike

  4. Hallo Eike,
    deine Plugin-Beschreibung ließt sich wirklich sehr interessant. Das ist wirklich das Plugin was mir noch fehlt. Mir geht es da wie Phillip (mit der Freundin und Entertain).
    Aber stimmt es, dass man mit dem Plugin nicht VORspulen kann? Das ist in meinen Augen ja grade das geniale an Timeshift, dass man das Fernsehprogramm anhalten kann und dann später über die Werbung wieder hinwegspult.

    Grüße

    1. Hallo! Sobald du im Abspielmodus bist (durch Pause Drücken), kannst du alles machen, was du beim Abspielen einer normalen Aufnahme auch machen kannst. Du musst zum Vorspulen halt nur der Livesendung ausreichend weit “hinterherhinken”, aber das ist ja klar. Viel Spaß! :o)

  5. @Eike: Endlich(!) baut wieder jemand permanentes Timeshift in den VDR, Da hab ich jahrelang drauf gewartet (hab das auch im VDR-Forum schon gesagt). Wirklich toll! Zwei Wünsche habe ich noch:

    - die Möglichkeit direkt ins Ram zu buffern, wenn man genug Ram hat.
    - direktes Zurückspulen (hast Du ja selbst schon angedeutet). Meiner Meinung nach musst Du Dir ncht so viele Gedanken wegen der geänderten Tastaturbelegung machen, das war im alten Livebuffer-Plugin auch so. Soll heißen: die alten User wie ich kennen das nicht anders, die neuen User müssen sich eh an was Neues gewöhnen ;)

    viele Grüße, Nix

  6. Hi Eike,

    bin Entertain-Kunde und YMMD. Diese Funktionalität ist das einzige was mich (oder besser meine Freundin) noch an diesen blöden Windows-Entertainreceiver bindet.

    Ich werde es am Wochenende mal testen. Benutzt du eigentlich das xine-Frontend, bzw. funktioniert das auch gut mit XBMC (xvdr).

    Viele Grüße
    Philipp

    1. Hallo!

      Man hat’s nicht immer leicht mit den Abkürzungen, ich hab jetzt zuerst auf “Your Mileage May Differ” getippt. :)

      Ich verwende sehr altmodisch eine SDTV-Röhre, die von einer auf E-Bay erstandenen Hauppauge PVR-350 gespeist wird. Ich kann dir daher zu deinen Fragen wenig sagen. Probier’s einfach mal aus (und berichte hier, wenn du magst), oder frag im VDR-Portal nach, da gibt’s bestimmt einen, der es schon probiert hat…

      Ciao,
      Eike

      1. Ja, so ähnlich :-D

        Ich kann dir berichten (ich konnte natürlich nicht bis morgen warten), dass ich meinen VDR patchen konnte und es auch sauber kompiliert bekommen habe. Er startet dann auch und lädt dein Plugin.

        In XBMC sind leider bei LiveTV die Spulentasten ausgegraut :-/ Insofern kann ich derzeit gerade nicht sagen, ob es bei mir funktioniert.

        Welche Einstellungen werden eigentlich in der setup.conf gemacht? Habe da nur eine neue entdeckt:
        DelTimeshiftRec = 0

        Ansonsten müsste ich doch zumindest die Cachedateien sehen in meinem VIDEO_DIR wenn ich auf Pause drücke, oder?

        Grüße
        Philipp

        1. Es gibt im Moment zwei Optionen:
          permashift.EnablePlugin = 1
          permashift.MaxTimeshiftLength = 4
          Das DelTimeshiftRec ist vom VDR selbst.
          Du solltest im VDR-Menü automatisch die Timeshift-Aufnahme sehen.
          Zurück kommst du über Pause, Play und dann Rewind (siehe oben. :-) ).
          Wenn du Hilfe brauchst, kannst du mich anmailen, an eike bei ein-eike.de

          1. Danke.

            Da ich das VDR-Menü derzeit nicht habe, da ich ja XBMC verwende, kann ich da nichts einstellen. Nachdem ich die beiden Einstellungen in die setup.conf gesetzt habe, entstehen beim “Zappen” jeweils immer neue Aufnahmen, scheint soweit also so weit zu funktionieren.

            Übrigens, beim vdr-plugin-xvdr ist auch schon eine Timeshift-Funktion mit dabei habe ich gerade gemerkt. Jedoch kann dir nur anhalten und und wieder abspielen. Deine kann ja schon mehr, vorspulen wäre noch nett. :-)

            1. Jetzt staun ich über zwei Sachen… daß man mit XBMC nicht irgendwo an die VDR-Optionen rankommt, und dass Permashift nicht von allein loslegt, wenn es keine Optionen findet.
              Den (nicht-permanenten) Timeshift, der ab Pause Drücken aufnimmt, hat der VDR wohl schon seit vielen Jahren.

              1. XBMC und VDR sind schon zwei verschiedene Dinge. In xbmc sieht man einen Stream vom VDR. Den kann man natürlich auch timeshiften, das macht dann aber xbmc (bzw. das dort laufende PVR-Plugin) und nicht der VDR. Die Timeshift-Funktion von Eike ist eine, die man direkt im VDR nutzen muss/kann/darf. Das hat keinen Einfluss auf die xbmc-Funktionen. Aber(!): Es gibt ein experimentelles PVR-Plugin für xbmc von FernetMenta (der auch das Standard-vnsi-plugin für xbmc maintained), welches ersten irgendwann auch so ein permantentes Timeshift in xbmc können solol und zweitens Zugriff auf das VDR-OSD bietet. Das ist aber ein ganz anderes Thema…

  7. Eine Frage: Wenn der permanante Timeshift sagen wir, bereits eine Stunde läuft und nun spule ich 15 Minuten (vom aktuellen live-Zeitpunkt) in der Timeshiftaufnahme zurück und drücke dann die Aufnahmetaste – wird die Aufnahme dann den GESAMTEN Timeshiftbuffer enthalten oder beginnt die Aufnahme dann beim Zeitpunkt zu dem man zurück gespult hat.
    So wie ich die Beschreibung gelesen habe, beginnt die Aufnahme mit dem Timeshiftbuffer-Beginn. Dann wäre es ja egal wohin ich zurückspule.
    Das wäre schade. Denn wenn man die Aufnahme weiterverarbeiten will – gar an einem anderen PC, muss man das ungewünschte Stück mitkopieren und hinterher rausschneiden.

    Lässt sich das in einer künftigen Version ändern?
    Ich bin da etwas von meinem alten Topfield-Receiver verwöhnt worden: aus dem Livebild Rückspultaste bis zum gewünschten Zeitpunkt, dann Aufnahme starten, die beginnt “hier”; mit einmal Stop springt man wieder zum Livebild und die Aufnahme hat bereits diese Zeitspanne “im Bauch” (aber eben auch keinen weiteren “Ballast” von davor) und läuft weiter.
    So was suche ich schon lange (und auch den kompletten Videotext im Aufnahmestream, z.B. wegen der Untertitel – das ist bei vdr immer noch nicht ohne Frickelei enthalten).

    1. Die Sofortaufnahme umfasst tatsächlich alles, was sie kriegen kann, also den Timeshift-Buffer von Anfang an. Aus meiner Sicht ist das die sicherere Variante. So bekomme ich so viel wie geht und kann im Zweifel wegschneiden. Bei deiner Variante könnte etwas verlorengehen, wenn man nicht damit rechnet.

      Man könnte (per Option umschaltbar) auch die andere Variante einbauen. Da stehe ich aber wieder vor dem Problem, dass das nur im VDR-Hauptprogramm realisiert werden könnte und ich den so wenig wie möglich umbauen will…

  8. Hallo,
    ich habe das Plugin gerade mal mit dem VDR 1.7.40 ausprobiert. Scheint in einem ersten kurzen Test zu funktionieren, allerdings ist das Makefile noch nicht auf den neuen Stand für den VDR > 1.7.36 angepasst, sondern fordert vehement eine make.config aus dem VDRDIR ein und hat noch nicht alle vorgeschlagenen Targets.

    Ach ja: den Ringbuffer im RAM (oder zumindest die Möglichkeit ein Unterverzeichnis des Aufnahmeverzeichnisses des VDR zu nutzen, das man auch in eine Ramdisk legen kann, würde ich tatsächlich bevorzugen ;)

    1. Danke für’s Probieren! Das mit dem Makefile geh ich jetzt an; es wird ja auch bald die nächste stabile Version des VDR (seit wieviel Jahren? ;) ) geben.

      Die Ramdisk klingt nach einer interessanten Idee, das würde die Sache auf meiner Seite etwas weniger kompliziert machen. (Und dafür beim Nutzer komplizierter.) Aber wie gesagt…

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>