ویڈیو شمارندی جال جدید میڈیا-رائکی اطلاقات کا ایک ذیلی خاکہ ہے، صارفین کو ایک فوری منظر پیش کرنے کی ضرورت ہے مکمل ویڈیو کھیلنے کے لئے. آئیو ایس ترقی میں سب سے زیادہ کارکردگی اور لچک دار آلات فراہم کرتا ہے

جب بچے پیدا ہوتے ہیں تو اُن کا کردار سمجھ جاتا ہے

اے وی ایفونڈیشن آڈیوویشن میڈیا کے ساتھ کام کرنے کے لیے ایپل کا بنیادی فریم ورک ہے. کے لیے کلیدی کلاسز اور asssssemegeger. [FL:3].

  • : بغیر ضرورت ضرورت کے آڈیو مال (ایک مقامی یا دور کی ویڈیو) کی نمائندگی کرتا ہے. اس میں sile معلومات، دورانیہ اور میٹادات موجود ہے۔
  • GuassetImage Generator: CGImage Refs کو مخصوص وقت پر حاصل کرنے کے طریقے فراہم کرنے کے طریقے۔ یہ ویڈیو یا تناسب کا احترام کرتا ہے، رنگیاتی اصلاحات کا اطلاق کرتا ہے اور اس کی حمایت کرتا ہے۔

ان کلاسوں کو براہِ‌راست استعمال کرتے ہوئے آپکو تصاویر کے سائز ، وقت کی درستی اور تبدیلی پر مکمل کنٹرول ملتا ہے ، یوکی‌کی‌ٹی‌ٹی‌ٹی‌اے کے برعکس جو اکثر حاملہ ہوتے ہیں ۔

منصوبہ‌سازی کریں

اپنی تیز رفتار فائل میں اے وی ایف لوڈنگ درآمد کرنے سے شروع کریں:

import AVFoundation

آپ کو ای میل کو فاعل تصاویر دکھانے کے لیے یو آئی کی ضرورت بھی ہے سے ایک لوکل فائل بنائیں. . کے لیے استعمال کے لیے. بعید ویڈیو استعمال، استعمال کر نے کے ليے اور سرمایہ کاری کو یقینی بنایا جا سکتا ہے:

// 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)

ایک تنہا ماں

ایک مخصوص وقت پر ایک sconsnail بنانے کے لیے بنائیں اور . یہ طریقہ کار Synchonous ہے اور یو آئی اے کو بلاک کرنے سے بچنے کے لیے بنیادی دھاگے سے دور چلایا جائے۔

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)")
}

[1] [FLT] پر تصویر کو یقینی بنانے والی تصویر کو ویڈیو کی گردش (Portrait vs. space) کے بغیر، ایک سیدھا ویڈیو دکھائی دے سکتی ہے۔

مناسب وقت کا تعیّن کرنا

تمل زبان میں اکثر ویڈیو کے شروع میں لیا جاتا ہے لیکن ایک وقت کا استعمال کرتے ہوئے مواد کی نمائندگی کرتا ہے—مثلا 10%

let duration = asset.duration
let midTime = CMTimeMultiplyByFloat64(duration, multiplier: 0.1)

غلطیوں اور ای‌ڈی کیس

لہٰذا ، اگر آپ کو کوئی مسئلہ کھڑا ہو جائے تو آپ اُس کے ساتھ دوستی کریں گے ۔

  • inservencial asseration: ویڈیو خراب یا struction ہو سکتی ہے۔
  • مسسنگ ویڈیو کوچ: کچھ سرمایہ کاری میں صرف آڈیو ہوتی ہے؛ چیک ۔
  • وقت کی حدود سے باہر : [1] طلب وقت کو دوبارہ شروع کرنا اور سرمایہ کاری کا دورانیہ کے درمیان ہے۔
  • غیر فعال غلطی : دوری مال لوڈ کرنے میں ناکام ہو سکتا ہے. استعمال کرنے سے پہلے استعمال کریں.

قبل از وقت سرمایہ کاری کی خصوصیات کا نمونہ:

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
 }
}

جب آپ کو کسی چیز کی کمی ہوتی ہے تو آپ کیا کر سکتے ہیں ؟

AVassetImaage Generalator کئی خصوصیات کو برآمدی تصویر کو ٹھیک کرنے کے لیے پیش کرتا ہے۔

حجم

کے استعمال سے پیدا کردہ تصویر کو دوبارہ منتقل کریں ۔

imageGenerator.maximumSize = CGSize(width: 640, height: 480)

لیکن اِس میں یہ بھی بتایا گیا ہے کہ یہ تصویر اِس بات کی طرف اشارہ کرتی ہے کہ اِن معیاروں کو پورا کرنے کے لئے اِن معیاروں پر پورا اُترنا ضروری ہے ۔

درخواست وقتی تاخیر

بِلِبِعْ مطلوبہ وقت پر درست فریم واپس کر دیتا ہے (یا ممکنہ طور پر قریب)۔ آپ کو طے کرنے سے تجارتی طور پر درستی طور پر حاصل ہو سکتی ہے اور . for FLT.nlines، ایک Execonst کا رویہ اکثر مقبول اور تیز رفتار ہوتا ہے:

imageGenerator.requestedTimeToleranceBefore = CMTime(seconds: 0.5, preferredTimescale: 600)
imageGenerator.requestedTimeToleranceAfter = CMTime(seconds: 0.5, preferredTimescale: 600)

ایک دوسرے پر بھروسا کریں

[FLT:CN] کنٹرول کرتا ہے کہ کیسے بنائی گئی تصویر کو صاف کر کے صاف کر کے ے ے ے بنانے والی ے بنانے والی چیز۔ استعمال کریں تاکہ کنارہ کو دھونے اور صاف کرنے والی ملاوٹ پیدا کریں:

imageGenerator.apertureMode = .cleanAperture

سیرت پر عمل کرنا

اگر آپ کو تصویر کو دوبارہ ترتیب دینا یا پھر کسی مخصوص یا اینے کے لیے تھوڑا سا استعمال کرنا ہوتا ہے تو پھر آپ کو کور گرافی تبدیل کر کے اس پر عمل کرنا ہوتا ہے ۔

جنین کی حالت بہت خراب ہوتی ہے

ویڈیو گرانٹ ، ٹائم لائن کی تیاری یا کہانی بورڈ پر پیش‌کردہ پیش‌کردہ باتوں کے لئے اکثر آپ کو بہت سی ایسی چیزیں درکار ہوتی ہیں جن سے آپ کو بڑا فائدہ ہوتا ہے کو مرکزی دھارے میں فون کرنے سے گریز کریں ۔

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")")
 }
}

یہ طریقہ توازن ٹھیک ہو اور آپ UIncrency کو اپ ڈیٹ کرنے دیں اگر صارف آزاد وسائل کے لیے سکرین چھوڑ دے تو

دور دراز ویڈیوز کیساتھ کام کرتے ہیں۔

جب ویڈیو پلگ سرور کی طرف اشارہ کرتا ہے تو آپکو اُس سرمایہ کا انتظار کرنا ہوگا جو مکمل طور پر لوڈ کیا جائے یا کم از کم اس کی پلیٹ معلومات کو دستیاب ہونے کے لئے درکار ہو استعمال کریں تاکہ دوبارہ ڈاؤن لوڈ کرنے سے بچنے کے لئے مناسب کیچ ہیڈ کوارٹرز استعمال کریں۔

let urlAsset = AVURLAsset(url: remoteURL, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
urlAsset.loadValuesAsynchronously(forKeys: ["tracks"]) {
 // Then create image generator and proceed
}

پروڈکشن پلگ ان ڈسک پر کیچنگ کیشن کا مطالعہ کریں تاکہ دوبارہ اسی ویڈیو تک رسائی دوبارہ حاصل کریں۔ تصویر کو دوبارہ نہیں بنایا جا سکتا۔ یا فائل پر مبنی کیچ کو بطور کلید استعمال کرتے ہوئے

حکمت عملی کا نمونہ

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)
 }
}

یہ کام سے بچنے کے لیے تصویری ایجنٹ کے ساتھ ملایئے

پیشگی تجاویز

جین انفلیشنل (Genervancentnails) ایک سی پی یو ⁇ nsive عمل ہے، خاص طور پر اعلیٰ ترین حل 4K ویڈیوز کے لیے

  • ہمیشہ سنسکرت کو پس منظر پر دعوت دیتا ہے (جیسے، )۔
  • برآمد شدہ تصویری مقدار کو کم کرنے کے لئے معقول سیٹ کریں. 320x240 کا حجم اکثر فہرست میں موجود شمارندی اکائیوں کے لیے کافی ہوتا ہے۔
  • استعمال کریں تاکہ آپ کسی بھی صارف کو درست ڈی کوڈ حل کرنے کی بجائے قریب ترین فریم کو دوبارہ حل کرنے کی اجازت دیں۔
  • کسی بھی غیر جانبدار کو ختم کر دیں جب نظریہ ختم ہو جاتا ہے۔
  • ایک مجمع‌النجوم میں ظاہر کرنے کیلئے ، درست سیل سائز پر موجود کیمیائی مادے پیدا کرنا اور بنیادی سوراخ پر دوبارہ سے دوبارہ سے کام نہ لینا ۔

تیز رفتار (Async/cresption) سے عدم استحکام حاصل کرنا

اگر آپ کے ایپی پے نشان یم او ایس 15+، تو آپ کو صاف اسنک/ایکشن کوڈ کے لئے ایک رکاوٹ میں بلاکنگ کال کو لپیٹ سکتے ہیں:

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)
 }
 }
 }
}

اضافی تقسیم

ویڈیو کوم‌ورک کیساتھ متحرک

اگر آپ کی ویڈیو ایک استعمال ہوتی ہے (مثلاً پانی کی سطح پر، رنگ کی اصلاحات) تو آپ اسے تصویری ایجنٹ تک پہنچا سکتے ہیں:

imageGenerator.videoComposition = myVideoComposition

یہ عمل اُس عمل کی عکاسی کرتا ہے جس میں اُس نے اپنے کام کو انجام دیا ہے ۔

زندہ تصاویر کیلئے جنین‌کش‌م‌مُنہ‌ن‌ناک ریل

زندہ فوٹون ایک ویڈیو اور اب تک تصویر کا ملاپ ہے. ذیلی ویڈیو سے ایک ور ڈرائنگ نکالنے کے لئے استعمال کریں اور AVFoundation میں کھانے سے پہلے ویڈیو پلگ انس کو طلب کریں.

ایک صارفی اور صارفی تجربہ

تمملندی اسکیلنگ بڑھاتے ہوئے ہمیشہ آواز سے پرو فانٹ صارفین کے لیے متن متبادل مہیا کرو تصویری منظرہ پر استعمال کرتے ہوئے ویڈیو مواد کو اگر ممکن ہو تو بیان کریں

imageView.isAccessibilityElement = true
imageView.accessibilityLabel = "Thumbnail of video: \(videoTitle)"

بیرونی وسائل

گہری سمجھ کے لیے مندرجہ ذیل سے رجوع کریں:

کُنَّا

ایک عادت ویڈیو ورانویل ایجنٹ بنانا آپ کو تصویری کیفیت، وقت اور کارکردگی پر مکمل آزادی فراہم کرتا ہے۔