OGVerticalFeedView
fun OGVerticalFeedView(items: List<OGVerticalFeedItem>, modifier: Modifier = Modifier, config: OGVerticalFeedConfig = OGVerticalFeedConfig.Builder().build(), state: OGVerticalFeedState = rememberOGVerticalFeedState(), onActiveItemChanged: (index: Int, item: OGVerticalFeedItem) -> Unit? = null, onItemProgress: (index: Int, positionMs: Long, durationMs: Long) -> Unit? = null, onNearEnd: (remaining: Int) -> Unit? = null, onItemSkipped: (index: Int, reason: String) -> Unit? = null, sponsoredBadge: @Composable (OGVerticalFeedItem) -> Unit? = null, onItemError: (index: Int, error: OGPlayerError) -> Unit? = null, errorOverlay: @Composable (error: OGPlayerError, retry: () -> Unit) -> Unit? = null, onAnalyticsEvent: (AnalyticsEvent) -> Unit? = null, onItemDoubleTapped: (index: Int, item: OGVerticalFeedItem) -> Unit? = null)
A swipeable portrait vertical vertical feed. Portrait-only BY DESIGN — this surface has no fullscreen, rotation or landscape API; pin your screen's orientation to portrait. It is a separate surface from com.ogplayer.ui.OGPlayerView on purpose, so a vertical feed can never be confused with the standard player.
The feed drives an internal pool of at most three engine instances: neighbours of the visible item are prepared (muted, paused, capped standby buffers) so swipes start instantly, items outside the window are recycled, and everything is released when the feed leaves composition.
The SDK never fetches feed data: supply items, listen to onNearEnd, append, and pass the longer list back in.