|
18 | 18 | aspect-ratio: 16 / 9; |
19 | 19 | background: #000; |
20 | 20 | } |
21 | | - .carousel-item img, |
22 | | - .carousel-item video { |
| 21 | + .carousel-item img { |
23 | 22 | object-fit: cover; |
24 | 23 | width: 100%; |
25 | 24 | height: 100%; |
26 | 25 | display: block; |
27 | 26 | } |
| 27 | + .carousel-item video { |
| 28 | + width: 100%; |
| 29 | + height: 100%; |
| 30 | + display: block; |
| 31 | + background: #000; |
| 32 | + } |
28 | 33 | /* If your video needs rotation, uncomment and adjust: |
29 | 34 | .carousel-item video.rotate90 { |
30 | 35 | transform: rotate(90deg); |
@@ -69,7 +74,15 @@ <h5>Photo 2</h5> |
69 | 74 |
|
70 | 75 | <!-- Video --> |
71 | 76 | <div class="carousel-item active"> |
72 | | - <video class="d-block w-100" controls playsinline preload="auto" muted> |
| 77 | + <video |
| 78 | + class="d-block w-100" |
| 79 | + controls |
| 80 | + playsinline |
| 81 | + preload="metadata" |
| 82 | + muted |
| 83 | + poster="" |
| 84 | + style="max-width: 100%; height: auto; min-height: 400px;"> |
| 85 | + <source src="/jconf-xtech/assets/video.mp4" type="video/mp4" /> |
73 | 86 | <source src="assets/video.mp4" type="video/mp4" /> |
74 | 87 | Your browser does not support HTML5 video. |
75 | 88 | </video> |
@@ -114,23 +127,52 @@ <h5>Photo 3</h5> |
114 | 127 | videos.forEach(v => v.pause()); |
115 | 128 | }); |
116 | 129 |
|
117 | | - // Debug video loading issues |
| 130 | + // Debug video loading issues and force load |
118 | 131 | document.addEventListener('DOMContentLoaded', () => { |
119 | 132 | const video = document.querySelector('video'); |
120 | 133 | if (video) { |
| 134 | + // Try to load the video |
| 135 | + video.load(); |
| 136 | + |
121 | 137 | video.addEventListener('error', (e) => { |
122 | 138 | console.error('Video error:', e); |
123 | | - console.error('Video error details:', video.error); |
| 139 | + console.error('Video error code:', video.error?.code); |
| 140 | + console.error('Video error message:', video.error?.message); |
| 141 | + console.error('Video network state:', video.networkState); |
| 142 | + console.error('Video ready state:', video.readyState); |
| 143 | + // Try alternative path |
| 144 | + if (video.error && video.error.code === 4) { |
| 145 | + const source = video.querySelector('source'); |
| 146 | + if (source && source.src === '/jconf-xtech/assets/video.mp4') { |
| 147 | + source.src = 'assets/video.mp4'; |
| 148 | + video.load(); |
| 149 | + } |
| 150 | + } |
124 | 151 | }); |
125 | 152 | video.addEventListener('loadstart', () => { |
126 | 153 | console.log('Video loading started'); |
127 | 154 | }); |
| 155 | + video.addEventListener('progress', () => { |
| 156 | + console.log('Video loading progress:', Math.round((video.buffered.length > 0 ? video.buffered.end(0) / video.duration * 100 : 0)) + '%'); |
| 157 | + }); |
128 | 158 | video.addEventListener('canplay', () => { |
129 | 159 | console.log('Video can play'); |
130 | 160 | }); |
| 161 | + video.addEventListener('canplaythrough', () => { |
| 162 | + console.log('Video can play through'); |
| 163 | + }); |
131 | 164 | video.addEventListener('loadedmetadata', () => { |
132 | | - console.log('Video metadata loaded'); |
| 165 | + console.log('Video metadata loaded, duration:', video.duration); |
| 166 | + }); |
| 167 | + video.addEventListener('loadeddata', () => { |
| 168 | + console.log('Video data loaded'); |
133 | 169 | }); |
| 170 | + |
| 171 | + // Log current source |
| 172 | + const source = video.querySelector('source'); |
| 173 | + if (source) { |
| 174 | + console.log('Video source:', source.src); |
| 175 | + } |
134 | 176 | } |
135 | 177 | }); |
136 | 178 | </script> |
|
0 commit comments