Table of Contents
ভিডিও থাম্বনেইল হচ্ছে আধুনিক প্রচার মাধ্যমের এক মাধ্যম অ্যাপ্লিকেশনের এক বিশাল চিত্র, যা ব্যবহারকারীদের দ্রুত প্রদর্শন করার প্রয়োজন নেই, তারা ভিডিওর পুরো ভিডিও খেলতে এবং তা প্রদর্শনের জন্য এক দৃশ্যমান দৃশ্য প্রদান করতে চায়। আইওএফএফএফ-এর মাধ্যমে এই প্রবন্ধ সবচেয়ে সেরা ভিডিও নির্মাণ করা হয়েছে এবং তা ধারণ করা হয়েছে।
থাম্বনেইল জেনারেশনে AVFP এর ভূমিকা বুঝতে পারা
অডিওভিএফএলেশন হলো Apple এর প্রাথমিক কাঠামো। থাম্বনেইলের জন্য থাম্বনেইল তৈরির জন্য, প্রধান ক্লাস হল [FRORST] [FO:L][FR.FOPL] এবং[/L][LOPRPL]:[/FOPL][/FW]:]:[3]
- [[[F][F][FLT][F]:] অডিওভিজুয়াল (কিছু সন্ধান করা যায় নি অথবা দূরবর্তী ভিডিও, অবকাল, এবং মিটা- ডাটা ।
- [[[F] [[F]] WEFPL[F][F]:[F] নির্দিষ্ট সময়ের মধ্যে quotif MymageRRRED কোড সংগ্রহ করার পদ্ধতি উপলব্ধ করা হয় । এটি সুনির্দিষ্ট সময়ের মধ্যে নির্ধারিত সময় থেকে ব্যয়, রঙের দিশা, রং, এবং অ্যাসিঙ্ক্রোনাসaligntwardic.
এই ক্লাসগুলো সরাসরি ব্যবহার করে ছবি, সময়, সামঞ্জস্য এবং রূপান্তরের জন্য আপনার পূর্ণ নিয়ন্ত্রণ সুবিধা দেয়, যা UIKat শর্টকাট প্রায়ই কনফিগারেশন অপশনের বিপরীত ।
প্রজেক্ট নির্ধারণ করা হচ্ছে
ফাইল ইম্পোর্ট করে আপনার spless শুরু করুন:
import AVFoundation
নির্মিত ইমেজগুলির জন্য UIKটও প্রয়োজন। [[F] এর মধ্যে একটি URL [FLT] নির্মাণ করুন। স্থানীয় ফাইল থেকে [FLT] ব্যবহার করুন:[FLT] ব্যবহার করুন], স্থানীয় ভিডিওর জন্য একটি ব্যবহার করুন [FLTR]: [FLT] এবং নিশ্চিত করুন::
// Local
let localURL = Bundle.main.url(forResource: "sample", withExtension: "mp4")!
let asset = AVAsset(url: localURL)
// Remote
let remoteURL = URL(string: "https://example.com/video.mp4")!
let remoteAsset = AVAsset(url: remoteURL)
একটি থাম্ব-নেইল নির্মাণ করা হচ্ছে
একটি নির্দিষ্ট সময় অবধি একটি থাম্ব-নেইল নির্মাণ করা হবে [FLT] [FLT] ও কল [FLT] কল করুন। এই পদ্ধতিটি সুসংগত হওয়া উচিত এবং UI- এর বন্ধ করার জন্য প্রধান থ্রেড থেকে সঞ্চালন করা উচিত।
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
let time = CMTime(seconds: 2.0, preferredTimescale: 600) // 2 seconds into the video
do {
let cgImage = try imageGenerator.copyCGImage(at: time, actualTime: nil)
let thumbnail = UIImage(cgImage: cgImage)
// Update UI on main thread
DispatchQueue.main.async {
imageView.image = thumbnail
}
} catch {
print("Thumbnail generation failed: \(error.localizedDescription)")
}
[[[[F]] পরবর্তী:[F][FLT] [FLT] [FLT] [FLT] [FLT] [FLT]] [FLT [F] এর জন্য ছবির সংশোধন অনুমোদন করো [AR] [AR] ভিডিওর সংশোধন করো] । এই it দ্বারা একটি সরল ভিডিও উপস্থিত হতে পারে ।
সঠিক সময় বাছাই করা
থাম্বনেইলকে ভিডিওর শুরুতে প্রায়ই গ্রহণ করা হয়, কিন্তু এমন একটি সময় বিবেচনা করা হয়, যা বিষয়বস্তুকে প্রতিনিধিত্ব করে-যেমন, সময় অনুসারে, সময় ১০% এর মধ্যে, অর্থপূর্ণ সময় গ্রহণ করার জন্য সম্পদের সময়কাল অনুসন্ধান করা হয়:
let duration = asset.duration
let midTime = CMTimeMultiplyByFloat64(duration, multiplier: 0.1)
ত্রুটি ও প্রান্তিক অক্ষর পরিচালন ব্যবস্থা নির্ধারণ করতে ব্যর্থ
থাম্ব-নেইল নির্মাণের সময় বিভিন্ন কারণে একাধিক কারণ সনাক্ত করা সম্ভব হয়। সাধারণতঃ পড়ুন এবং মূল সমস্যা দেখা দিতে পারে।
- [[[F] অবৈধ সম্পদ:[FLT][FLT] এই ভিডিওটি ক্ষতিগ্রস্ত, অথবা URL-টি ত্রুটিপূর্ণ।
- [[[F] ভিডিও ট্র্যাক অনুসন্ধান:[FLT]] শুধুমাত্র অডিও; CD পরীক্ষা করুন [FLT] [FLT]:]
- [[[F] সীমা অতিক্রান্ত:[F][F]] [FLT]],[FLT] এবং সম্পদের মেয়াদের মধ্যে যে - বারের মধ্যে উল্লেখ করা হয়েছে তা নিশ্চিত করুন [F]
- [[[F] নেটওয়ার্ক ত্রুটি:[FLT][FLT] স্থানীয় সম্পদ] লোড করতে ব্যর্থ হতে পারে। [FLT] থাম্বনেইল নির্মাণের পূর্বে ব্যবহার করুন। [FLT]
বৈশিষ্ট্য লোড করতে ব্যবহৃত প্রেশারম্ভের উদাহরণ:
let assetKeys = ["tracks", "duration", "playable"]
asset.loadValuesAsynchronously(forKeys: assetKeys) {
var error: NSError?
let status = asset.statusOfValue(forKey: "tracks", error: &error)
if status == .loaded {
// Safe to generate thumbnails
} else {
// Handle error
}
}
স্বনির্ধারিত আউটপুট
একটিভিএসাইন ইমেজসেন অপারেটর, ছবির ছবির গুণগত মান উন্নত করার জন্য বেশ কিছু বৈশিষ্ট্য প্রদান করেছে।
সর্বাধিক মাপ
[[F] [FLT] ব্যবহার করে একটি নির্দিষ্ট বাক্সের মধ্যে একটি নির্দিষ্ট ব্লক করা চিত্র ধারণ করে ।
imageGenerator.maximumSize = CGSize(width: 640, height: 480)
এই মাত্রা অনুযায়ী নির্মিত ছবিটি মাপার জন্য মাপ নির্ধারণ করা হবে, যখন অনুপাত সংরক্ষণের সময় এই মাত্রাকে রক্ষা করা হবে।
অনুরোধ করা সময়ের অঞ্চলের অনুরোধ
ডিফল্ট মান [[[F] অনুরোধকৃত অবস্থায় সঠিক ফ্রেম প্রত্যাবর্তন করুন । অনুরোধ করার উদ্দেশ্যে সঠিক ফ্রেমটি ফেরত দেওয়া হয় (অথবা সম্ভব হিসাবে) । আপনি [FODR:] ব্যবহার করে দ্রুত ও [FRO:]]] পপ- আপ ফাইলর ক্ষেত্রে প্রযোজ্য নয়, এটি হল 0 (FR) । সাধারণ মান হল 0 (ft), : 55 সেকেন্ড:
imageGenerator.requestedTimeToleranceBefore = CMTime(seconds: 0.5, preferredTimescale: 600)
imageGenerator.requestedTimeToleranceAfter = CMTime(seconds: 0.5, preferredTimescale: 600)
অ্যাপার্চারের মোড
[[F] কীভাবে নির্মিত ছবি পরিষ্কারকরণ ভ্রমকে নিয়ন্ত্রণ করে তা নিয়ন্ত্রণ করে ।
imageGenerator.apertureMode = .cleanAperture
রূপান্তর প্রক্রিয়া
যদি আপনাকে একটি নির্দিষ্ট আকার জন্য আবর্তন বা আবর্তন করতে হয় (যেমন, একটি নির্দিষ্ট সংখ্যার জন্য), একটি পদ্ধতি ব্যবহার করা হয় । এর একটি পদ্ধতি হচ্ছে পরিব্যক্তিকে ধারণ করা এবং তারপর একটি CGAufanations নির্দিষ্ট করে এটি প্রয়োগ করা। বিকল্প দ্বারা আপনি [F] মান নির্ধারণ করতে পারেন [F] [F]: [F]] [F]] এবং স্বাভাবিক দিশা নির্ধারণ করুন ।
একাধিক থাম্বলেইলিং
ভিডিও গ্রিড, টাইম সেব্রম অথবা গল্প বোর্ড প্রাকদর্শন, আপনাকে প্রায়ই ডজন ডজন থাম্বনেইলের মধ্যে থাকতে হবে । প্রধান থ্রেডে [[FFLT] কল করা এড়িয়ে চলুন । এর পরিবর্তে, অ্যামিডরিটা পদ্ধতি [F2:] ব্যবহার করুন । একাধিক সময় ব্যবহৃত হয়, এর ফলে অভ্যন্তরীণ প্রতিদৈর্ঘ্যের মধ্যে বিদ্যমান বিদ্যমান বিদ্যমান অভ্যন্তরীণতা দেখা দেয় ।
var times: [NSValue] = []
for i in 0..<10 {
let time = CMTime(seconds: Double(i) * 2.0, preferredTimescale: 600)
times.append(NSValue(time: time))
}
imageGenerator.generateCGImagesAsynchronously(forTimes: times) { requestedTime, cgImage, actualTime, result, error in
if result == .succeeded, let cgImage = cgImage {
let thumbnail = UIImage(cgImage: cgImage)
DispatchQueue.main.async {
// Append to array or update collection view cell
}
} else {
print("Failed at \(requestedTime): \(error?.localizedDescription ?? "unknown")")
}
}
এই পদ্ধতিতে ভাল মান এবং সময় আপনাকে মধ্য ভাগ করতে হবে । মনে রাখবেন [F9:] যদি ব্যবহারকারী দ্বারা মুক্ত রিসোর্সের জন্য পর্দা ত্যাগ করে থাকেন ।
দূরবর্তী ভিডিও সহ কাজ করা হচ্ছে
দূরবর্তী সার্ভারের সাথে সংযোগ স্থাপনের সময় ভিডিও URL-র ইঙ্গিত দেওয়া হলে, সার্ভারের মধ্যে কোনো বৈশিষ্ট্য উপলব্ধ করা যাবে না অথবা কম মাপের ট্র্যাকের জন্য অন্তত একটি ট্র্যাক অনুসন্ধান করা আবশ্যক। [FLTR] পরে, সংশ্লিষ্ট URI সহ কোনো বৈশিষ্ট্যের সাথে প্রেরিত তথ্য উপলব্ধ করা হবে। উল্লেখ্য: [FLTR]
let urlAsset = AVURLAsset(url: remoteURL, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
urlAsset.loadValuesAsynchronously(forKeys: ["tracks"]) {
// Then create image generator and proceed
}
ছবির বিন্যাস নির্মাণ করার জন্য উদাহরণের ক্ষেত্রে প্রযোজ্য নয়। ত্রুটির ফলে, ডিস্কের মধ্যে এই ধরনের থাম্ব-নেইল নির্মাণ করা হয় এবং তারপর শুধুমাত্র একটি ভিডিও ফাইল রূপে এনকোড করা হয়। উল্লেখ্য: [F] [FLT] অথবা কি-র মাধ্যমে ভিডিও ফাইল রূপে নির্মিত হবে।
কৌশলের উদাহরণ গণনা করা হচ্ছে
class ThumbnailCache {
static let shared = ThumbnailCache()
private let cache = NSCache<NSString, UIImage>()
func thumbnail(for url: URL) -> UIImage? {
return cache.object(forKey: url.absoluteString as NSString)
}
func setThumbnail(_ image: UIImage, for url: URL) {
cache.setObject(image, forKey: url.absoluteString as NSString)
}
}
অনধিকারিক কাজ এড়িয়ে যাওয়ার জন্য ছবিটি জেনারেটরের সাথে এই ছবি লোড করুন।
কর্মক্ষমতার বিশ্লেষণ
ছবির থাম্বলেইলিং হচ্ছে একটি CPUCPCTPCT, বিশেষ করে উচ্চ পর্যায়ের ৪K ভিডিওর জন্য।
- সবসময় পটভূমিতে হোস্টের নাম উল্লেখ করা হবে (যেমন, [FLT: 3. 7:4)
- ছবির আকার ছোট/বড় করার জন্য একটি কনটেন্ট নির্ধারণ করুন [[F]:৩৫] ছবির মাত্রা হ্রাস করার জন্য ৩২০২৪০ ব্যবহার করুন।
- পরীক্ষা [[FLT] সঠিক ডি- স্বয়ংক্রিয়ভাবে ডি-কোড করার পরিবর্তে নিকটবর্তী ফ্রেম উপেক্ষা করার জন্য জেনারেটর ব্যবহার করুন ।
- যখন ভিউ অদৃশ্য হবে তখন শপথ গ্রহণ করা হবে।
- সংগ্রহ অনুযায়ী প্রদর্শন ক্ষেত্রে ছবির সংকলনের ডানদিকে থাম্ব-নেইল নির্মাণ ও মূল থ্রেড নির্মাণ করা হবে।
সুইজারেন্সি (একাঁদুন) দিয়ে শুভেচ্ছা
আপনার অ্যাপ্লিকেশনের লক্ষ্যবস্তু IOS ১৫+, আপনি পরিষ্কার/অন্তর্ভাগ কোডের জন্য একটি নিয়মিত আমন্ত্রণপত্রের মাধ্যমে বন্ধ করে দিতে পারেন:
func generateThumbnail(forVideoAt url: URL, at time: CMTime) async throws -> UIImage {
let asset = AVAsset(url: url)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
imageGenerator.maximumSize = CGSize(width: 640, height: 480)
return try await withCheckedThrowingContinuation { continuation in
let times = [NSValue(time: time)]
imageGenerator.generateCGImagesAsynchronously(forTimes: times) { _, cgImage, _, result, error in
if let cgImage = cgImage, result == .succeeded {
let image = UIImage(cgImage: cgImage)
continuation.resume(returning: image)
} else {
continuation.resume(throwing: error ?? ThumbnailError.generationFailed)
}
}
}
}
উন্নত অনুসন্ধান
ভিডিওর সংকলনের সাথে থাম্ব-নেইল
আপনার ভিডিও যদি [FLT:] [FLT:] (যেমন, জলস্রোত, রং রদবদল) করে, আপনি সেটা ছবি জেনারেটরে যেতে পারেন:
imageGenerator.videoComposition = myVideoComposition
নির্মিত থাম্বনেইলের ফলাফলকে হালকাভাবে দেখাবে।
লাইভ ফটোর জন্য থাম্ব-নেইল নির্মাণ করা হচ্ছে
লাইভ ফটো একটি ভিডিও এবং একটি চিত্রের সমন্বয়। ভিডিও থেকে থাম্বনেইল সংগ্রহ করতে [FFR::::::) AVFFOFPCIOCTPCTIBSCT) ব্যবহার করুন এবং একটি ভিডিও URL অনুরোধ করুন।
সহায়ক প্রযুক্তি এবং ব্যবহারকারী অভিজ্ঞতা
থাম্বনেইলের মাধ্যমে দৃশ্যমান স্ক্যানের গতি বৃদ্ধি করে কিন্তু সবসময় ভয়েস আনকোড ব্যবহারকারীদের জন্য একটি বিকল্প সরবরাহ করে । [FFL] [F4:1] এই ভিডিওর বর্ণনার মধ্যে দিয়ে ভিডিওর বিষয়বস্তু বর্ণনা করা যায় ।
imageView.isAccessibilityElement = true
imageView.accessibilityLabel = "Thumbnail of video: \(videoTitle)"
বহিস্থিত রিসোর্স
আরও গভীরভাবে বোঝার জন্য নীচের বিষয়গুলো বিবেচনা করুন:
- [[F] [F] [AV]IBROPBRONCT প্রতিবেদন পার্স করা হয় [FON]
- [[F] [AV] রেফারেন্সের ত্রুটি [F]
- [[F] WDWERS ২০: AVFOPRECTE:[FOP] [FOPL]
অন্তর্ভুক্ত
AVFOFPstion দ্বারা একটি স্বনির্ধারিত ভিডিও থাম্বনেইল তৈরি করা আপনাকে ছবির মান, সময়, সময়, কর্মক্ষমতার সম্পূর্ণ স্বাধীনতা প্রদান করবে। QLL [F3:43] prop3] দ্বারা স্বতস্ফূর্ত এবং Aftingt, Alicationst, Aropy এবং strignting ফলাফল, আপনার এলাকার মধ্যে থাকা সামুদ্রিক ব্যবহারকারী অথবা দূরবর্তী ফাইল ফাইল তৈরি করতে সাহায্য করবে।