mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-01 21:24:52 +00:00
Merge pull request #164 from CrissZollo/feature-playback-speed
Feature playback speed
This commit is contained in:
commit
9d54ec44e4
2 changed files with 27 additions and 1 deletions
|
|
@ -188,6 +188,8 @@ const AndroidVideoPlayer: React.FC = () => {
|
||||||
const [textTracks, setTextTracks] = useState<TextTrack[]>([]);
|
const [textTracks, setTextTracks] = useState<TextTrack[]>([]);
|
||||||
const [selectedTextTrack, setSelectedTextTrack] = useState<number>(-1);
|
const [selectedTextTrack, setSelectedTextTrack] = useState<number>(-1);
|
||||||
const [resizeMode, setResizeMode] = useState<ResizeModeType>('contain');
|
const [resizeMode, setResizeMode] = useState<ResizeModeType>('contain');
|
||||||
|
const speedOptions = [0.5, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0];
|
||||||
|
const [playbackSpeed, setPlaybackSpeed] = useState<number>(1.0);
|
||||||
const [buffered, setBuffered] = useState(0);
|
const [buffered, setBuffered] = useState(0);
|
||||||
const [seekTime, setSeekTime] = useState<number | null>(null);
|
const [seekTime, setSeekTime] = useState<number | null>(null);
|
||||||
const videoRef = useRef<VideoRef>(null);
|
const videoRef = useRef<VideoRef>(null);
|
||||||
|
|
@ -1643,6 +1645,16 @@ const AndroidVideoPlayer: React.FC = () => {
|
||||||
}, 300);
|
}, 300);
|
||||||
}, [resizeMode]);
|
}, [resizeMode]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Cycle playback speed
|
||||||
|
const cyclePlaybackSpeed = useCallback(() => {
|
||||||
|
const idx = speedOptions.indexOf(playbackSpeed);
|
||||||
|
const newIdx = (idx + 1) % speedOptions.length;
|
||||||
|
const newSpeed = speedOptions[newIdx];
|
||||||
|
setPlaybackSpeed(newSpeed);
|
||||||
|
}, [playbackSpeed, speedOptions]);
|
||||||
|
|
||||||
const enableImmersiveMode = () => {
|
const enableImmersiveMode = () => {
|
||||||
StatusBar.setHidden(true, 'none');
|
StatusBar.setHidden(true, 'none');
|
||||||
if (Platform.OS === 'android') {
|
if (Platform.OS === 'android') {
|
||||||
|
|
@ -3334,7 +3346,7 @@ const AndroidVideoPlayer: React.FC = () => {
|
||||||
resizeMode={getVideoResizeMode(resizeMode)}
|
resizeMode={getVideoResizeMode(resizeMode)}
|
||||||
selectedAudioTrack={selectedAudioTrack || undefined}
|
selectedAudioTrack={selectedAudioTrack || undefined}
|
||||||
selectedTextTrack={useCustomSubtitles ? { type: SelectedTrackType.DISABLED } : (selectedTextTrack >= 0 ? { type: SelectedTrackType.INDEX, value: selectedTextTrack } : undefined)}
|
selectedTextTrack={useCustomSubtitles ? { type: SelectedTrackType.DISABLED } : (selectedTextTrack >= 0 ? { type: SelectedTrackType.INDEX, value: selectedTextTrack } : undefined)}
|
||||||
rate={1.0}
|
rate={playbackSpeed}
|
||||||
volume={volume}
|
volume={volume}
|
||||||
muted={false}
|
muted={false}
|
||||||
repeat={false}
|
repeat={false}
|
||||||
|
|
@ -3389,6 +3401,8 @@ const AndroidVideoPlayer: React.FC = () => {
|
||||||
skip={skip}
|
skip={skip}
|
||||||
handleClose={handleClose}
|
handleClose={handleClose}
|
||||||
cycleAspectRatio={cycleAspectRatio}
|
cycleAspectRatio={cycleAspectRatio}
|
||||||
|
cyclePlaybackSpeed={cyclePlaybackSpeed}
|
||||||
|
currentPlaybackSpeed={playbackSpeed}
|
||||||
setShowAudioModal={setShowAudioModal}
|
setShowAudioModal={setShowAudioModal}
|
||||||
setShowSubtitleModal={setShowSubtitleModal}
|
setShowSubtitleModal={setShowSubtitleModal}
|
||||||
isSubtitleModalOpen={showSubtitleModal}
|
isSubtitleModalOpen={showSubtitleModal}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ interface PlayerControlsProps {
|
||||||
skip: (seconds: number) => void;
|
skip: (seconds: number) => void;
|
||||||
handleClose: () => void;
|
handleClose: () => void;
|
||||||
cycleAspectRatio: () => void;
|
cycleAspectRatio: () => void;
|
||||||
|
cyclePlaybackSpeed: () => void;
|
||||||
|
currentPlaybackSpeed: number;
|
||||||
setShowAudioModal: (show: boolean) => void;
|
setShowAudioModal: (show: boolean) => void;
|
||||||
setShowSubtitleModal: (show: boolean) => void;
|
setShowSubtitleModal: (show: boolean) => void;
|
||||||
isSubtitleModalOpen?: boolean;
|
isSubtitleModalOpen?: boolean;
|
||||||
|
|
@ -66,6 +68,8 @@ export const PlayerControls: React.FC<PlayerControlsProps> = ({
|
||||||
skip,
|
skip,
|
||||||
handleClose,
|
handleClose,
|
||||||
cycleAspectRatio,
|
cycleAspectRatio,
|
||||||
|
cyclePlaybackSpeed,
|
||||||
|
currentPlaybackSpeed,
|
||||||
setShowAudioModal,
|
setShowAudioModal,
|
||||||
setShowSubtitleModal,
|
setShowSubtitleModal,
|
||||||
isSubtitleModalOpen,
|
isSubtitleModalOpen,
|
||||||
|
|
@ -177,6 +181,14 @@ export const PlayerControls: React.FC<PlayerControlsProps> = ({
|
||||||
</Text>
|
</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
{/* Playback Speed Button */}
|
||||||
|
<TouchableOpacity style={styles.bottomButton} onPress={cyclePlaybackSpeed}>
|
||||||
|
<Ionicons name="speedometer" size={20} color="white" />
|
||||||
|
<Text style={styles.bottomButtonText}>
|
||||||
|
Speed {currentPlaybackSpeed}x
|
||||||
|
</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
|
||||||
{/* Audio Button - Updated to use ksAudioTracks */}
|
{/* Audio Button - Updated to use ksAudioTracks */}
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
style={styles.bottomButton}
|
style={styles.bottomButton}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue