mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-05 23:18:53 -05:00
fix: Audio file / media: desktop Safari, and on iPhone Safari, Chrome and FireFox: Not possible to trim audio
closes 144
This commit is contained in:
parent
d90d99a682
commit
54c8ee9d94
@ -47,14 +47,24 @@ const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
|||||||
const isValidPoster = mediaPosterUrl && mediaPosterUrl !== 'None' && mediaPosterUrl.trim() !== '';
|
const isValidPoster = mediaPosterUrl && mediaPosterUrl !== 'None' && mediaPosterUrl.trim() !== '';
|
||||||
const posterImage = isValidPoster ? mediaPosterUrl : (isAudioFile ? AUDIO_POSTER_URL : undefined);
|
const posterImage = isValidPoster ? mediaPosterUrl : (isAudioFile ? AUDIO_POSTER_URL : undefined);
|
||||||
|
|
||||||
// Detect iOS device
|
// Detect iOS device and Safari browser
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const checkIOS = () => {
|
const checkIOS = () => {
|
||||||
const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;
|
const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;
|
||||||
return /iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream;
|
return /iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const checkSafari = () => {
|
||||||
|
const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;
|
||||||
|
return /Safari/.test(userAgent) && !/Chrome/.test(userAgent) && !/Chromium/.test(userAgent);
|
||||||
|
};
|
||||||
|
|
||||||
setIsIOS(checkIOS());
|
setIsIOS(checkIOS());
|
||||||
|
|
||||||
|
// Store Safari detection globally for other components
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
(window as any).isSafari = checkSafari();
|
||||||
|
}
|
||||||
|
|
||||||
// Check if video was previously initialized
|
// Check if video was previously initialized
|
||||||
if (typeof window !== 'undefined') {
|
if (typeof window !== 'undefined') {
|
||||||
@ -345,7 +355,7 @@ const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
|||||||
<div className="video-player-container">
|
<div className="video-player-container">
|
||||||
<video
|
<video
|
||||||
ref={videoRef}
|
ref={videoRef}
|
||||||
preload="auto"
|
preload="metadata"
|
||||||
crossOrigin="anonymous"
|
crossOrigin="anonymous"
|
||||||
onClick={handleVideoClick}
|
onClick={handleVideoClick}
|
||||||
playsInline
|
playsInline
|
||||||
@ -356,7 +366,10 @@ const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
|||||||
poster={posterImage}
|
poster={posterImage}
|
||||||
>
|
>
|
||||||
<source src={sampleVideoUrl} type="video/mp4" />
|
<source src={sampleVideoUrl} type="video/mp4" />
|
||||||
<p>Your browser doesn't support HTML5 video.</p>
|
{/* Safari fallback for audio files */}
|
||||||
|
<source src={sampleVideoUrl} type="audio/mp4" />
|
||||||
|
<source src={sampleVideoUrl} type="audio/mpeg" />
|
||||||
|
<p>Your browser doesn't support HTML5 video or audio.</p>
|
||||||
</video>
|
</video>
|
||||||
|
|
||||||
{/* iOS First-play indicator - only shown on first visit for iOS devices when not initialized */}
|
{/* iOS First-play indicator - only shown on first visit for iOS devices when not initialized */}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user