Skip to content

Commentaires et bullet comments

Deux systèmes de commentaires coexistent : les commentaires classiques en fil, et les bullet comments (danmaku), ce texte en surimpression qui défile sur la vidéo en suivant la lecture.

Commentaires classiques

Un CommentsExtractor est un ListExtractor<CommentsInfoItem> ; CommentsInfo.getInfo(url) le pilote comme n'importe quelle liste, avec getMoreItems pour la pagination. Il peut signaler que toute la section est désactivée via isCommentsDisabled().

Un CommentsInfoItem est riche :

java
String getCommentText();  String getUploaderName();  String getUploaderAvatarUrl();
int getLikeCount();  String getTextualLikeCount();
boolean isPinned();  boolean isHeartedByUploader();  boolean isUploaderVerified();
int getStreamPosition();        // timestamp the comment points at, or NO_STREAM_POSITION
int getReplyCount();  Page getReplies();   // replies are their own page
Collection<Image> getPictures();

Les réponses ne sont pas en ligne : chaque élément porte une Page replies, récupérée via la même mécanique getMoreItems quand l'utilisateur déplie un fil.

Bullet comments (danmaku)

Les bullet comments sont une autre bête, modélisés pour une surimpression plutôt que pour une liste. BulletCommentsExtractor (aussi un ListExtractor) ajoute des contrôles adaptés au direct :

java
boolean isLive();  boolean isDisabled();
List<BulletCommentsInfoItem> getLiveMessages();   // poll new ones on a live stream
void setCurrentPlayPosition(long ms);             // align the overlay to playback
void disconnect();  void reconnect();  void clearMappingState();

Un BulletCommentsInfoItem décrit comment et quand peindre un bullet comment :

java
String getCommentText();
Duration getDuration();      // when in the video it appears (required)
int getArgbColor();          // ARGB32, e.g. white = 0xFFFFFFFF
Position getPosition();       // REGULAR, BOTTOM, TOP, SUPERCHAT
double getRelativeFontSize();
int getLastingTime();        // how long it stays on screen
boolean isLive();

Les éléments sont Comparable par leur timestamp, ainsi la surimpression peut les rejouer dans l'ordre.

Qui en dispose

Les bullet comments sont implémentés par BiliBili (BilibiliBulletCommentsExtractor), NicoNico (NiconicoBulletCommentsExtractor) et le chat en direct de YouTube (YoutubeBulletCommentsExtractor). Un service y adhère en surchargeant getBulletCommentsLHFactory() / getBulletCommentsExtractor() (null par défaut) et en déclarant la capacité BULLET_COMMENTS. Les services sans danmaku ne l'exposent simplement jamais.