UNPKG

expo-dlna-player

Version:

A React Native/Expo module for DLNA/AirPlay media casting to smart TVs and streaming devices

90 lines (76 loc) 2.57 kB
import type { StyleProp, ViewStyle } from 'react-native'; export interface DeviceInfo { id: string; name: string; model?: string; manufacturer?: string; ipAddress?: string; type: 'dlna' | 'airplay' | 'miracast'; controlURL?: string; renderControlURL?: string; } export interface PlaybackStatus { isPlaying: boolean; duration: number; position: number; volume: number; } export type ExpoDlnaPlayerModuleEvents = { onDeviceFound: (device: DeviceInfo) => void; onDeviceDisappeared: (deviceId: string) => void; onConnectionChanged: (params: ConnectionChangedEventPayload) => void; onPlaybackStatusChanged: (status: PlaybackStatus) => void; onError: (params: ErrorEventPayload) => void; onPermissionStatus: (params: PermissionStatusEventPayload) => void; }; export type ErrorEventPayload = { code: string; message: string; deviceId?: string; }; export type PermissionStatusEventPayload = { permission: 'localNetwork' | 'bluetooth' | 'location'; status: 'granted' | 'denied' | 'unavailable'; }; export type ConnectionChangedEventPayload = { deviceId: string; connected: boolean; } export type ExpoDlnaPlayerViewProps = { autoDiscover?: boolean; style?: StyleProp<ViewStyle>; }; export interface ProjectionMode { SCREEN_MIRRORING: string; VIDEO_ONLY: string; } interface EventEmitterInterface<T> { addListener(eventType: keyof T, listener: T[keyof T]): { remove: () => void }; removeListener(eventType: keyof T, listener: T[keyof T]): void; removeAllListeners(eventType?: keyof T): void; emit(eventType: keyof T, ...args: any[]): void; listenerCount(eventType: keyof T): number; } export interface DLNAPlayerInterface extends EventEmitterInterface<ExpoDlnaPlayerModuleEvents> { // 设备搜索相关 startDiscovery(): Promise<void>; stopDiscovery(): Promise<void>; getDevices(): Promise<DeviceInfo[]>; // 连接与控制 connectToDevice(deviceId: string): Promise<boolean>; disconnectFromDevice(): Promise<void>; isConnected(): Promise<boolean>; getConnectedDevice(): Promise<DeviceInfo | null>; // 媒体控制 play(url: string, title?: string, mimeType?: string): Promise<void>; pause(): Promise<void>; resume(): Promise<void>; stop(): Promise<void>; seek(position: number): Promise<void>; setVolume(volume: number): Promise<void>; getPlaybackStatus(): Promise<PlaybackStatus>; // Miracast特定功能 startProjection(deviceId: string, mode?: string): Promise<boolean>; stopProjection(): Promise<void>; isProjectionSupported(): Promise<boolean>; }