Я получаю массив URL-адресов видео, которые мне нужно отобразить в виде миниатюры (нужно показать это видео) или миниатюры видео.
для этого попробовал ниже
код: с этим кодом отображается только изображение-заполнитель. мне нужно видео, чтобы его показали
struct GalleryVedioDetailsView: View {
@State private var gotoPreview = false
@StateObject private var viewModel = GalleryViewModel()
var body: some View {
ZStack {
Color.hexF4F4FC
.ignoresSafeArea()
VStack(spacing: 0) {
VStack {
ScrollView {
LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 4), count: 4), spacing: 4) {
ForEach(0..<viewModel.video.count, id: \.self) { ind in
Button {
gotoPreview = true
} label: {
let width = ((screenWidth - 24) / 4) - 2
URLImageView(url: viewModel.video[ind].url ?? "" , placeholder: "PhotogalleryPlaceholder", width: width, height: width)
.scaledToFill()
.clipped()
}
.buttonStyle(.plain)
}
}
.padding(.top, 10)
.padding(.horizontal, 12)
}
}
}
}
}
}
о/п: показываю вот так
нужно вот так
@Larme да, это что-то вроде этого https://www.youtube.com/embed/somecodeofvideo
Подождите, это URL видео или миниатюры? Обычно для такого типа API имеется миниатюра изображения с другим URL-адресом. Что такое URLImageView? Это для изображения, а не для видео?
@Larme, я получаю URL-адрес видео из серверной части... могу ли я показать это как миниатюру изображения/видео? это URLImageView я использую для изображения... я не знаю, что использовать для видео... пожалуйста, подскажите, но я не получаю миниатюр для этого из серверной части





QuickLook Thumbnailing — это платформа, которую необходимо использовать для создания миниатюр.
Вы генерируете QLThumbnailGenerator.Request
тогда используй QLThumbnailGenerator.shared.generateBestRepresentation
для получения результата асинхронно.
Я изменил строку URL на миниатюру вот так.. это сработало для меня
ForEach(0..<viewModel.video.count, id: \.self) { ind in
Button {
// gotoPreview = true
} label: {
let width = ((screenWidth - 24) / 4) - 2
ZStack {
if let strPhotoURL1 = viewModel.video[ind].url, let value = strPhotoURL1.extractYoutubeIdFromLink() {
let strVideoID = value
let strPhotoURL = "https://img.youtube.com/vi/\(strVideoID)/hqdefault.jpg"
URLImageView(url: strPhotoURL, placeholder: "PhotogalleryPlaceholder")
.scaledToFill()
.clipped()
} else {
URLImageView(url: "", placeholder: "PhotogalleryPlaceholder", width: width, height: width)
.scaledToFill()
.clipped()
}
Image(systemName: "play.circle.fill")
.resizable()
.frame(width: 25, height: 25)
.foregroundColor(.white)
.opacity(0.7)
}
}
.buttonStyle(.plain)
}
extension String {
func extractYoutubeIdFromLink() -> String? {
let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)"
guard let regExp = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) else {
return nil
}
let nsLink = self as NSString
let options = NSRegularExpression.MatchingOptions(rawValue: 0)
let range = NSRange(location: 0, length: nsLink.length)
let matches = regExp.matches(in: self as String, options: options, range: range)
if let firstMatch = matches.first {
return nsLink.substring(with: firstMatch.range)
}
return nil
}
}
о/п будет вот так
Правильно ли значение
viewModel.video[ind].url ?? ""? Имеет ли он «http://» и это не просто относительный путь, не ноль и т. д.?