Dos sistemas de comentarios conviven uno junto al otro: los comentarios ordinarios en hilos, y los bullet comments (danmaku), el texto superpuesto que se desplaza por el vídeo sincronizado con la reproducción.
Un CommentsExtractor es un ListExtractor<CommentsInfoItem>; CommentsInfo.getInfo(url) lo conduce como a cualquier lista, con getMoreItems para la paginación. Puede reportar que toda la sección está desactivada mediante isCommentsDisabled().
Un CommentsInfoItem es rico:
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_POSITIONint getReplyCount(); Page getReplies(); // replies are their own pageCollection<Image> getPictures();
Las respuestas no van en línea: cada item lleva una Page de replies, obtenida a través de la misma maquinaria de getMoreItems cuando el usuario expande un hilo.
Los bullet comments son otra historia, modelados para una superposición en lugar de para una lista. BulletCommentsExtractor (también un ListExtractor) añade controles conscientes del directo:
java
boolean isLive(); boolean isDisabled();List<BulletCommentsInfoItem> getLiveMessages(); // poll new ones on a live streamvoid setCurrentPlayPosition(long ms); // align the overlay to playbackvoid disconnect(); void reconnect(); void clearMappingState();
Un BulletCommentsInfoItem describe cómo y cuándo pintar un comentario:
java
String getCommentText();Duration getDuration(); // when in the video it appears (required)int getArgbColor(); // ARGB32, e.g. white = 0xFFFFFFFFPosition getPosition(); // REGULAR, BOTTOM, TOP, SUPERCHATdouble getRelativeFontSize();int getLastingTime(); // how long it stays on screenboolean isLive();
Los items son Comparable por su timestamp, así que la superposición puede reproducirlos en orden.
Los bullet comments están implementados por BiliBili (BilibiliBulletCommentsExtractor), NicoNico (NiconicoBulletCommentsExtractor) y el chat en directo de YouTube (YoutubeBulletCommentsExtractor). Un servicio se suma sobrescribiendo getBulletCommentsLHFactory() / getBulletCommentsExtractor() (null por defecto) y declarando la capacidad BULLET_COMMENTS. Los servicios sin danmaku simplemente nunca lo exponen.
Comentarios y bullet comments
Dos sistemas de comentarios conviven uno junto al otro: los comentarios ordinarios en hilos, y los bullet comments (danmaku), el texto superpuesto que se desplaza por el vídeo sincronizado con la reproducción.
Comentarios ordinarios
Un
CommentsExtractores unListExtractor<CommentsInfoItem>;CommentsInfo.getInfo(url)lo conduce como a cualquier lista, congetMoreItemspara la paginación. Puede reportar que toda la sección está desactivada medianteisCommentsDisabled().Un
CommentsInfoItemes rico:Las respuestas no van en línea: cada item lleva una
Pagedereplies, obtenida a través de la misma maquinaria degetMoreItemscuando el usuario expande un hilo.Bullet comments (danmaku)
Los bullet comments son otra historia, modelados para una superposición en lugar de para una lista.
BulletCommentsExtractor(también unListExtractor) añade controles conscientes del directo:Un
BulletCommentsInfoItemdescribe cómo y cuándo pintar un comentario:Los items son
Comparablepor su timestamp, así que la superposición puede reproducirlos en orden.Quién los tiene
Los bullet comments están implementados por BiliBili (
BilibiliBulletCommentsExtractor), NicoNico (NiconicoBulletCommentsExtractor) y el chat en directo de YouTube (YoutubeBulletCommentsExtractor). Un servicio se suma sobrescribiendogetBulletCommentsLHFactory()/getBulletCommentsExtractor()(null por defecto) y declarando la capacidadBULLET_COMMENTS. Los servicios sin danmaku simplemente nunca lo exponen.