expo-dlna-player
Version:
A React Native/Expo module for DLNA/AirPlay media casting to smart TVs and streaming devices
91 lines • 3.05 kB
TypeScript
import type { StyleProp, ViewStyle } from 'react-native';
export interface DeviceInfo {
id: string;
name: string;
model?: string;
manufacturer?: string;
ipAddress?: string;
type: 'dlna' | 'miracast';
controlURL?: string;
renderControlURL?: string;
}
export interface PlaybackStatus {
isPlaying: boolean;
duration: number;
position: number;
volume: number;
rate?: number;
isMuted?: boolean;
bufferedPosition?: number;
bufferedDuration?: number;
isBuffering?: boolean;
isReadyToPlay?: boolean;
isCompleted?: boolean;
error?: string;
}
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>;
setRate?(rate: number): Promise<void>;
setMuted?(muted: boolean): Promise<void>;
getBufferingStatus?(): Promise<object>;
startProjection(deviceId: string, mode?: string): Promise<boolean>;
stopProjection(): Promise<void>;
isProjectionSupported(): Promise<boolean>;
}
export type ConnectionStatus = {
deviceId: string;
connected: boolean;
};
export {};
//# sourceMappingURL=ExpoDlnaPlayer.types.d.ts.map