Einführung
In diesem Dokument wird der Lebenszyklus einer Liveübertragung auf YouTube beschrieben, die mit der YouTube Live Streaming API und der YouTube Content ID API erstellt und verwaltet wird.
Ressourcen und Ressourcentypen
Wie im Leitfaden für den Einstieg erläutert, ist eine Ressource ein individuelles Datenobjekt mit einer eindeutigen ID. Zum Erstellen und Verwalten von Live-Events auf YouTube verwendest du verschiedene Ressourcentypen, die entweder in der YouTube Data API oder der YouTube Content ID API definiert sind. Die unter dem Header YouTube Live Streaming API aufgeführten Ressourcen sind technisch in den anderen APIs definiert, werden aber separat aufgeführt, da sie nur für Live-Übertragungen verwendet werden.
YouTube Live Streaming API-Ressourcen
YouTube Data API-Ressourcen
YouTube Content ID API-Ressourcen
Livestream erstellen und verwalten
In den folgenden Schritten wird erläutert, wie du ein Live-Event auf YouTube erstellst und verwaltest. Die Schritte sind in die folgenden Phasen unterteilt:
- Übertragung einrichten
- Inhalte beanspruchen
- Test
- Nachricht an alle
- Übertragung beenden
- Verweis erstellen
Phase 1: Übertragung einrichten
Schritt 1.1: Broadcast erstellen
Rufen Sie die Methode liveBroadcasts.insert
auf, um Ihre Übertragung in den YouTube-Zeitplan für Live-Veranstaltungen aufzunehmen. Für die liveBroadcast
-Ressource, die Sie einfügen, müssen Werte für die unten aufgeführten Attribute definiert werden.
Beachte beim Einrichten deines Livestreams die folgenden Richtlinien:
Wenn Sie eine Testphase für Ihre Übertragung einrichten möchten, in der Sie Ihre Videoübertragung ansehen können, ohne dass andere Zuschauer sie sehen können, müssen Sie die Property
contentDetails.monitorStream.enableMonitorStream
auftrue
und die PropertycontentDetails.enableAutoStart
auffalse
festlegen. Das sind die Standardwerte für beide Properties.Wenn Sie eine Referenz aus Ihrer aufgezeichneten Übertragung erstellen möchten, müssen Sie die Eigenschaft
contentDetails.recordFromStart
der Übertragung auftrue
festlegen. Wenn das aufgezeichnete Video sofort nach dem Ende der Übertragung zur Wiedergabe verfügbar sein soll, müssen Sie die PropertycontentDetails.enableDvr
auftrue
festlegen. Beide Properties haben den Standardwerttrue
.Du kannst alle
contentDetails
-Attribute aktualisieren, solange der Status deiner Übertragungcreated
oderready
ist.Du kannst die geplante Start- und Endzeit des Livestreams aktualisieren, solange der Status des Livestreams
created
,ready
odertesting
ist.Titel, Beschreibung, Datenschutzstatus und andere Metadatenfelder der Übertragung, die Teil der
video
-Ressource der Übertragung sind, können jederzeit aktualisiert werden.
Hinweis:Wenn dein Video nur für bestimmte YouTube-Nutzer verfügbar sein soll, lege den Wert der Propertystatus.privacyStatus
entsprechend deinen Anforderungen aufunlisted
oderprivate
fest.
API-Antwort verarbeiten
Wenn Sie die Methode liveBroadcasts.insert
aufrufen, enthält die API-Antwort die von Ihnen erstellte Ressource liveBroadcast
. Ihr Code sollte die id
aus dieser Ressource extrahieren und speichern. Sie benötigen diesen Wert, um die Übertragung in zukünftigen API-Anfragen zu identifizieren. Sie können die video
-Ressource, die der liveBroadcast
-Ressource entspricht, auch mit derselben ID identifizieren.
Schritt 1.2: Stream erstellen
Mit einer liveStream
-Ressource können Sie Ihr Video an YouTube übertragen. Außerdem werden die übertragenen Inhalte beschrieben. Jede Übertragung muss genau einem Stream zugeordnet sein.
Rufen Sie die Methode liveStreams.insert
auf, um den Videostream für Ihr Event zu erstellen. Beim Erstellen des Streams müssen Sie Werte für die unten aufgeführten Attribute festlegen:
Mit Ausnahme des Titels des Streams können diese Werte nach dem Erstellen des Streams nicht mehr aktualisiert werden. Wenn Sie sie ändern möchten, müssen Sie einen anderen Stream erstellen, indem Sie diesen Schritt wiederholen. Dieser Prozess wird später in diesem Dokument in Schritt 3.5 genauer beschrieben.
Sie haben auch die Möglichkeit, Werte für die folgenden Eigenschaften festzulegen:
snippet.description
: Wie der Streamtitel kann auch die Streambeschreibung nach dem Erstellen des Streams aktualisiert werden. Weder der Titel noch die Beschreibung sind für YouTube-Nutzer sichtbar.contentDetails.isReusable
: Gibt an, ob der Stream wiederverwendbar ist. Das bedeutet, dass er an mehrere Übertragungen gebunden werden kann. Der Wert dieser Eigenschaft bestimmt, ob ein Channel eine n:1- oder 1:1-Beziehung zwischenliveBroadcast
- undliveStream
-Ressourcen hat:- Wenn Sie den Standardwert
true
der Eigenschaft verwenden, können Sie dieselbeliveStream
-Ressource für alle Übertragungen eines Kanals verwenden. Das bedeutet, dass du diesen Schritt (1.2) nicht für jede Übertragung wiederholen musst. Stattdessen kannst du die Stream-ID für nachfolgende Übertragungen einfach wiederverwenden. - Wenn Sie den Attributwert auf
false
festlegen, müssen Sie für jede Übertragung einen neuen Stream erstellen.
- Wenn Sie den Standardwert
Nachdem Sie die API-Anfrage für den Stream gesendet haben, enthält die API-Antwort die von Ihnen erstellte liveStream
-Ressource. Ihr Code sollte die id
aus dieser Ressource extrahieren und speichern. Sie benötigen diesen Wert, um den Stream in zukünftigen API-Anfragen zu identifizieren.
Schritt 1.3: Sendung mit dem Stream verknüpfen
Nachdem Sie die Ressourcen liveBroadcast
und liveStream
erstellt haben, müssen Sie sie mit der Methode liveBroadcasts.bind
verknüpfen. Durch diese Aktion werden die Videobits, die Sie an YouTube übertragen, mit der Eventübertragung für dieses Video verknüpft.
Legen Sie beim Aufrufen der Methode liveBroadcasts.bind
den Parameter id
auf die in Schritt 1.1 abgerufene Broadcast-ID und den Parameter streamId
auf die in Schritt 1.2 abgerufene Stream-ID fest.
Phase 2: Inhalte beanspruchen
Wenn du während deiner Übertragung Anzeigen einblenden möchtest, musst du das Übertragungsvideo vor Beginn des Events beanspruchen. Die folgenden Schritte erläutern diesen Vorgang. Alle in dieser Phase beschriebenen API-Aufrufe sind in der YouTube Content ID API definiert.
Schritt 2.1: Asset erstellen
Eine asset
-Ressource stellt ein Stück geistiges Eigentum dar. In diesem Fall ist das Asset deine Übertragung. Rufen Sie die Methode assets.insert
auf, um Ihr Asset zu erstellen.
Die API-Antwort enthält die von Ihnen erstellte asset
-Ressource. Ihr Code sollte die id
aus dieser Ressource extrahieren und speichern, da Sie diesen Wert benötigen, um das Asset in zukünftigen API-Anfragen zu identifizieren.
Schritt 2.2: Inhaberschaft des Assets definieren
Die Eigentumsdaten eines Assets geben die Rechteinhaber eines Assets sowie die Gebiete an, in denen sie die Eigentumsrechte an dem Asset besitzen. YouTube verwendet diese Daten, um zu ermitteln, wo ein Rechteinhaber die Richtlinie für ein Video, auf das Anspruch erhoben wurde, festlegen kann.
Wenn du beispielsweise das Recht hast, ein Event in den USA zu übertragen, und ein anderer Sender die gleichen Rechte für Kanada besitzt, könnt ihr jeweils unterschiedliche Richtlinien für das übertragene Video und für von Nutzern hochgeladene Videos definieren, die mit dem übertragenen Video übereinstimmen. Deine Abgleichsrichtlinie wird auf übereinstimmende, von Nutzern hochgeladene Videos in den USA angewendet, während die Richtlinie des anderen Inhabers auf übereinstimmende Videos in Kanada angewendet wird.
Rufen Sie die Methode ownership.update
auf, um die Gebiete zu definieren, in denen Sie über die Eigentumsrechte an dem Asset verfügen.
Legen Sie in dieser Anfrage den Parameter assetId
auf den id
fest, den Sie in Schritt 2.1 gespeichert haben.
Schritt 2.3: Abgleichsrichtlinie des Assets festlegen
In der Abgleichsrichtlinie eines Assets wird beschrieben, was YouTube tun soll, wenn ein Nutzer ein Video hochlädt, das mit einer Referenz übereinstimmt, die mit dem Asset verknüpft ist. In diesem Fall wird in der Abgleichsrichtlinie angegeben, wie YouTube mit einem hochgeladenen Video verfahren soll, das mit deiner Liveübertragung übereinstimmt.
Hinweis:Du solltest eine Abgleichsrichtlinie festlegen, wenn du eine Referenz aus deinem Livestream erstellen und damit von Nutzern hochgeladene Videos identifizieren möchtest, die mit deinem Livestream übereinstimmen. Ansonsten können Sie diesen Schritt überspringen.
Um die Abgleichsrichtlinie festzulegen, müssen Sie zuerst die Richtlinie identifizieren, die Sie anwenden möchten. Sie können eine Liste der vorhandenen Richtlinien abrufen, indem Sie die Methode policies.list
aufrufen. Alternativ können Sie eine neue Richtlinie definieren, indem Sie die Methode policies.insert
aufrufen. In beiden Fällen müssen Sie die id
der Richtlinie erfassen, die Sie anwenden möchten.
Rufen Sie die Methode assetMatchPolicy.update
auf, nachdem Sie die Richtlinie identifiziert haben. Legen Sie in dieser Anfrage den Parameter assetId
auf den id
fest, den Sie in Schritt 2.1 gespeichert haben.
Schritt 2.4: Anspruch auf dein Video erheben
In diesem Schritt erstellen Sie einen Anspruch, der das Video, das Sie übertragen möchten, mit dem Asset verknüpft, das Sie in Schritt 2.1 erstellt haben. Durch den Anspruch wird eine Richtlinie festgelegt, die nur für dein übertragenes Video gilt. Von Nutzern hochgeladene Videos, die mit deinem Broadcast-Video übereinstimmen, fallen unter die im vorherigen Schritt festgelegte Abgleichsrichtlinie.
Rufen Sie zum Erstellen eines Anspruchs die Methode claims.insert
auf. In der claim
-Ressource, die Sie einfügen, müssen Sie Werte für die folgenden Attribute festlegen:
assetId
: Diesen Wert haben Sie in Schritt 2.1 erhalten.videoId
: Das ist die Broadcast-ID, die Sie in Schritt 1.1 erhalten haben.policy
– Dies ist einepolicy
-Ressource. Sie können eine vorhandene Richtlinie anwenden, indem Sie dieid
-Eigenschaft der Ressource auf die ID der vorhandenen Richtlinie festlegen. Im vorherigen Schritt wurde beschrieben, wie Sie die ID einer vorhandenen Richtlinie abrufen.contentType
: Legen Sie diesen Wert aufaudiovisual
fest.
API-Antwort verarbeiten
Wenn Sie den Anspruch einfügen, enthält die API-Antwort die von Ihnen erstellte claim
-Ressource. Ihr Code sollte die id
aus dieser Ressource extrahieren und speichern. Sie verwenden diesen Wert später, um eine Referenz aus Ihrem verarbeiteten Video zu erstellen.
Schritt 2.5: Werbeeinstellungen für die Übertragung aktualisieren
Du musst die Werbeoptionen für dein Video festlegen, wenn du entweder eine Preroll-Anzeige schalten möchtest, wenn Zuschauer mit der Wiedergabe deines Streams beginnen, oder wenn du während Pausen in deinem Stream Anzeigen schalten möchtest.
- Wenn du Preroll-Anzeigen für deinen Stream aktivierst, sehen alle Zuschauer eine Anzeige, wenn sie sich deinen Stream ansehen, auch wenn sie ihn erst in der Mitte des Streams starten.
- Wenn du Mid-Roll-Anzeigen für deine Übertragung aktivierst, kannst du während der Übertragung Anzeigen-Cuepoints einfügen.
Rufen Sie die Methode videoAdvertisingOptions.update
auf, um Anzeigen zu aktivieren. Legen Sie in Ihrer Anfrage den Parameter videoId
auf die Broadcast-id
fest, die Sie in Schritt 1.1 erhalten haben. Verwenden Sie die Eigenschaft adFormats[]
der Ressource videoAdvertisingOption
, um die Anzeigenformate (preroll
, midroll
oder postroll
) zu identifizieren, die Sie aktivieren möchten.
Phase 3: Testen
In dieser Phase betten Sie einen Player ein, in dem der Monitorstream für Ihre Übertragung angezeigt wird, damit Sie das Zuschauererlebnis testen können. Der Monitor-Stream ist ein privater Stream, in dem du dir eine Vorschau des Broadcast-Videos ansehen kannst, so wie es YouTube-Zuschauern angezeigt wird.
Du kannst deinen Videostream nur testen, wenn der Monitorstream aktiviert ist. Standardmäßig sind Monitor-Streams für Übertragungen aktiviert. Du kannst den Monitorstream einer Übertragung deaktivieren, indem du beim Erstellen oder Aktualisieren der Übertragung das Attribut contentDetails.monitorStream.enableMonitorStream auf false
setzt.
Schritt 3.1: Monitorstream-Player einbetten
Rufen Sie Ihre Übertragung mit der Methode liveBroadcasts.list
ab und extrahieren Sie den Wert des Attributs contentDetails.streamDetails.monitorStreamEmbedHtml
. Dieser Wert enthält den HTML-Code, den Sie zum Einbetten eines YouTube-Players benötigen, in dem Ihr Monitorstream angezeigt wird.
Schritt 3.2: Video starten
Starte die Übertragung von Video in deinem Videostream.
Schritt 3.3: Videostream aktivieren
Rufen Sie die Methode liveStreams.list
auf, um die liveStream
-Ressource abzurufen, die mit Ihrer Übertragung verknüpft ist. Prüfe, ob der Wert der Property status.streamStatus
active
ist. Das bedeutet, dass die YouTube-Server Daten von deinem Encoder korrekt empfangen.
Schritt 3.4: Status der Übertragung auf „Testen“ umstellen
Rufen Sie die Methode liveBroadcasts.transition
auf, um den Status der Übertragung zu aktualisieren. Legen Sie den Parameterwert id
auf die in Schritt 1.1 abgerufene Broadcast-ID und den Parameterwert broadcastStatus
auf testing
fest.
Nachdem Sie die Methode liveBroadcasts.transition
aufgerufen haben, kann es einige Sekunden oder sogar bis zu einer Minute dauern, bis der Übergang abgeschlossen ist. Während dieser Zeit sollten Sie die API abfragen, um den Status der Übertragung zu prüfen. Bis die Umstellung abgeschlossen ist, lautet der Status der Übertragung testStarting
. Der Status ist testing
, sobald die Umstellung abgeschlossen ist.
Schritt 3.5: Tests abschließen
Wenn der Test reibungslos verlaufen ist, können Sie mit Phase 4 fortfahren. In einigen Fällen müssen Sie jedoch möglicherweise weitere Tests durchführen. Wenn bei Ihren Tests beispielsweise festgestellt wird, dass der Videostream nicht richtig konfiguriert ist, müssen Sie das Problem beheben, bevor Sie mit der Übertragung fortfahren.
Wenn der Videostream nicht richtig konfiguriert ist, musst du die Verknüpfung des vorhandenen Streams aufheben und ihn löschen und dann einen neuen Stream erstellen. Ein Stream ist beispielsweise möglicherweise nicht richtig konfiguriert, wenn das falsche Videoformat angegeben ist.
-
Rufen Sie zum Aufheben der Bindung des Videostreams die Methode
liveBroadcasts.bind
aus Schritt 1.3 auf. Legen Sie in der API-Anfrage den Parameterid
auf den in Schritt 1.1 abgerufenenid
fest. Fügen Sie den ParameterstreamId
nicht in die Anfrage ein. -
Rufen Sie zum Löschen des Videostreams die Methode
liveStreams.delete
auf. Legen Sie in der Anfrage den Parameterid
auf den in Schritt 1.2 abgerufenenid
fest. -
Wiederholen Sie Schritt 1.2, um eine neue, richtig konfigurierte
liveStream
-Ressource zu erstellen. Wiederhole dann Schritt 1.3, um den neuen Stream an deine Übertragung zu binden, und die Schritte 3.1 bis 3.3, um den neuen Stream zu testen.
Schritt 3.6: autoStart
- und autoStop
-Properties aktivieren
Nachdem du die Testphase erfolgreich abgeschlossen hast, kannst du die Eigenschaften contentDetails.enableAutoStart
und contentDetails.enableAutoStop
der Übertragung vor Beginn der eigentlichen Übertragung auf true
festlegen. Diese Eigenschaften können vor der Testphase nicht auf true
gesetzt werden, da der Test tatsächlich dazu führen würde, dass die Übertragung gestartet wird.
Phase 4: Übertragung
In dieser Phase können deine Zuschauer dein Video ansehen.
Schritt 4.1: Video starten
Starte die Übertragung von Video in deinem Videostream.
Schritt 4.2: Videostream aktivieren
Rufen Sie die Methode liveStreams.list
auf, um die liveStream
-Ressource abzurufen, die mit Ihrer Übertragung verknüpft ist. Prüfe, ob der Wert der Property status.streamStatus
active
ist. Das bedeutet, dass die YouTube-Server Daten von deinem Encoder korrekt empfangen.
Schritt 4.3: Status der Übertragung auf „Live“ umstellen
Wichtig:Durch diesen Schritt wird dein Video für deine Zuschauer sichtbar.
Rufen Sie die Methode liveBroadcasts.transition
auf, um den Status der Übertragung zu aktualisieren. Legen Sie den Parameterwert id
auf die in Schritt 1.1 abgerufene Broadcast-ID und den Parameterwert broadcastStatus
auf live
fest.
Wenn Sie die Property contentDetails.enableAutoStart
der liveBroadcast
-Ressource auf true
festlegen, müssen Sie die Methode liveBroadcasts.transition
nicht aufrufen.
Nachdem Sie diesen API-Aufruf ausgeführt haben oder, wenn Sie die Eigenschaft contentDetails.enableAutoStart
auf true
festgelegt haben, nachdem Sie mit dem Streamen begonnen haben, müssen Sie in der Regel 5 bis 10 Sekunden warten, bis der Übergang abgeschlossen ist. Die Umstellung kann bis zu einer Minute dauern. Während dieser Zeit sollten Sie die API abfragen, um den Status der Übertragung zu prüfen. Bis zur Umstellung wird der Status der Übertragung als liveStarting
angezeigt. Der Status wird auf live
aktualisiert, sobald die Übergangsphase abgeschlossen ist und Zuschauer sich deine Übertragung ab diesem Zeitpunkt im Monitorstream ansehen können.
Beachten Sie die folgenden Auswirkungen dieses Befehls:
- Wenn du den Monitorstream für deine Übertragung aktiviert hast (siehe Schritt 3.1), kannst du ihn in einem eingebetteten Player sehen.
- Wenn Sie einen Wert für die
contentDetails.streamDetails.broadcastStreamDelayMs
-Eigenschaft der Übertragung festgelegt haben, wird der für andere Zuschauer sichtbare Übertragungsstream um diesen Zeitraum verzögert.
Schritt 4.4: Werbeunterbrechungen in die Übertragung einfügen
Rufen Sie die Methode liveBroadcasts.cuepoint
auf, um einen Cuepoint einzufügen. Der Cuepoint löst möglicherweise eine Werbeunterbrechung aus. Legen Sie in der im Anfragetext angegebenen Ressource cuepoint
das Attribut durationSecs
auf die gewünschte Länge der Pause (in Sekunden) fest, die angezeigt werden soll. (Der Standardwert ist 30
.)
Zu diesem Zeitpunkt versucht YouTube, im Videoplayer eine Anzeige für alle Zuschauer abzuspielen, die sich die Übertragung angesehen haben, als der Anzeigen-Cuepoint eingefügt wurde. Ob eine Anzeige abgespielt wird, hängt von verschiedenen Faktoren ab, z. B. von der Verfügbarkeit von Anzeigen und dem Anzeigenwiedergabeverlauf des Zuschauers. Zuschauer, die eine Werbeunterbrechung sehen, kehren zu deinem Stream zurück, wenn die Werbeunterbrechung beendet ist. Zuschauer, denen keine Werbung eingeblendet wird, sehen den Stream während der Pause weiter.
Im Leitfaden für den Einstieg findest du weitere Informationen zur Wiedergabe während einer Werbeunterbrechung in einer Liveübertragung.
Phase 5: Übertragung beenden
Schritt 5.1: Streaming beenden
Damit ist der Test des YouTube-Livestreamingsystems abgeschlossen.
Schritt 5.2: Status der Übertragung auf „Abgeschlossen“ ändern
Wenn Sie die Übertragung beenden möchten, rufen Sie die Methode liveBroadcasts.transition
der API auf, um den Status der Übertragung zu aktualisieren. Legen Sie für den Parameter id
die Broadcast-ID aus Schritt 1.1 und für den Parameter broadcastStatus
den Wert complete
fest.
Wenn du die Eigenschaften contentDetails.recordFromStart
und contentDetails.enableDvr
der Übertragung auf true
gesetzt hast, können deine Zuschauer nach dem Ende des Live-Events sofort die Wiedergabe des Live-Events ansehen.
Phase 6: Referenz erstellen
Nach Abschluss der Live-Aufzeichnung können Sie eine Referenz aus dem aufgezeichneten Video erstellen. Durch diese Aktion wird YouTube angewiesen, nach von Nutzern hochgeladenen Videos zu suchen, die mit der Übertragung übereinstimmen, und sie gemäß der in Schritt 2.3 festgelegten Abgleichsrichtlinie zu behandeln.
Wichtig:Damit du die Referenz erstellen kannst, musst du die contentDetails.recordFromStart
-Eigenschaft der Übertragung auf true
festgelegt haben.
Schritt 6.1: Data API nach dem Status des Videos abfragen
YouTube muss die Verarbeitung einer Übertragung oder eines hochgeladenen Videos abgeschlossen haben, bevor du daraus eine Referenz erstellen kannst. Um festzustellen, ob die Verarbeitung des Videos abgeschlossen ist, rufen Sie die Methode videos.list
der YouTube Data API auf. Legen Sie den Parameter part
auf status
und den Parameter id
auf die Broadcast-ID fest, die Sie in Schritt 1.1 gespeichert haben.
Die API-Antwort auf Ihre Polling-Anfrage enthält eine video
-Ressource.
Wenn der Wert des Attributs status.uploadStatus dieser Ressource processed
ist, fahren Sie mit Schritt 6.2 fort.
Schritt 6.2: Referenz aus dem verarbeiteten Video erstellen
Rufen Sie zum Erstellen der Referenz die Methode references.insert
der Content ID API auf und legen Sie den Parameter claimId
auf die Anspruchs-ID fest, die Sie in Schritt 2.4 gespeichert haben.
Content ID-Bereitstellung für Liveinhalte
Einige YouTube-Partner können eine Referenz erstellen, bevor ihr Livestream in den Status testing
wechselt. Diese Funktion ist jedoch nicht für alle Partner verfügbar. In diesem Ablauf generiert YouTube die Referenz aus dem Broadcast-Stream deiner Live-Veranstaltung und aktualisiert sie fortlaufend, während der Broadcast läuft. Außerdem sucht YouTube nach übereinstimmenden von Nutzern hochgeladenen Videos, während die Übertragung noch läuft. Wenn Sie vor Beginn eines Livestreams eine Referenz erstellen, wird die Aufzeichnung für den Livestream automatisch aktiviert. Die Aufzeichnung kann nach der Erstellung der Referenz nicht mehr deaktiviert werden.
Wenn du die Live-Content ID-Auslieferung für deine Übertragung aktivieren möchtest, führe die in Schritt 6.2 beschriebenen Aktionen aus, nachdem du dein Video in Schritt 2.4 beansprucht hast.
Wenn Ihr Partnerkonto nicht für die Erstellung einer Referenz für eine Liveübertragung vor der Übertragung genehmigt wurde, gibt die API den Fehler fingerprintingNotAllowed
zurück. In diesem Fall müssen Sie warten, bis die Übertragung abgeschlossen ist (siehe oben, Schritte 6.1 und 6.2), bevor Sie die Referenz erstellen können.