দ্রষ্টব্য, নীচের প্রশ্নের জন্য: সমস্ত সম্পদ ডিভাইসে স্থানীয় - কোনও নেটওয়ার্ক স্ট্রিমিং হচ্ছে না। ভিডিওগুলিতে অডিও ট্র্যাক রয়েছে।
আমি এমন একটি আইওএস অ্যাপ্লিকেশন নিয়ে কাজ করছি যা প্রশ্নোত্তর ভিডিও ক্লিপ শুরু করতে সর্বনিম্ন বিলম্বের সাথে ভিডিও ফাইল খেলতে পারে। দুর্ভাগ্যক্রমে আমরা জানি না যে সুনির্দিষ্ট ভিডিও ক্লিপটি পরবর্তী কী, যতক্ষণ না আমাদের এটির শুরু করার প্রয়োজন হয়। বিশেষত: যখন একটি ভিডিও ক্লিপ বাজানো হয়, তখন আমরা জানব যে পরবর্তী ভিডিওগুলি (মোটামুটিভাবে) 10 টি ভিডিও ক্লিপগুলি কী, তবে পরবর্তী ক্লিপটি 'অবিলম্বে' খেলার সময় না আসা পর্যন্ত আমরা কোনটি ঠিক তা জানি না know
আমি প্রকৃত আরম্ভের বিলম্বগুলি দেখার জন্য যা করেছি তা হ'ল addBoundaryTimeObserverForTimes
ভিডিও প্লেয়ারকে কল করা, ভিডিওটি কখন খেলতে শুরু করে তা দেখার জন্য এক মিলি সেকেন্ডের সময়কালের সাথে এবং আমি সেই সময়ের স্ট্যাম্পের পার্থক্যটি প্রথম স্থানের সাথে নিয়ে যাই কোড যা নির্দেশ করে যে কোন সম্পদটি খেলতে শুরু করবে।
আমি এখন পর্যন্ত যা দেখেছি তা থেকে, আমি দেখতে পেয়েছি যে AVAsset
লোডিংয়ের সংমিশ্রণটি ব্যবহার করে এবং AVPlayerItem
এটি প্রস্তুত AVPlayerStatusReadyToPlay
হওয়ার পরে এটি থেকে একটি তৈরি করা এবং তারপরে আমি খেলার কল করার আগে অপেক্ষা করতে শুরু করতে 1 এবং 3 সেকেন্ডের মধ্যে সময় নেয় ক্লিপ.
আমি যেহেতু আমার কাছে মোটামুটি সমতুল্য: কল করা [AVPlayerItem playerItemWithURL:]
এবং AVPlayerItemStatusReadyToPlay
খেলার জন্য অপেক্ষা করাতে আমি স্যুইচ করেছি । মোটামুটি একই কর্মক্ষমতা।
একটি জিনিস আমি পর্যবেক্ষণ করছি তা হচ্ছে প্রথম এভিপ্লেয়ার আইটেম লোডটি বাকীগুলির চেয়ে ধীর। মনে হয় একটি ধারণা হ'ল প্রথম ভিডিওটি চালানোর চেষ্টা করার আগে একটি স্বল্প / খালি সম্পদ সহ এভিপ্লেয়ারের প্রাক-বিমান চালানো ভাল সাধারণ অনুশীলনের হতে পারে। [ প্রথমবার কোনও শব্দ বাজলে AVAudioPlayer এর জন্য ধীর শুরু করুন
আমি ভিডিওটি যতবার সম্ভব নিচে নেমে আসতে চাই এবং কিছু পরীক্ষা করার জন্য কিছু ধারণা পেয়েছি তবে সাহায্য করতে সক্ষম এমন কারও কাছ থেকে কিছু গাইডেন্স চাই।
আপডেট: ধারণা 7, নীচে, প্রায় 500 এমএসের পরিবর্তিত হিসাবে ফলিত ফলন। এটি একটি উন্নতি, তবে এটি আরও দ্রুত পেয়ে ভাল লাগবে।
আইডিয়া 1: এন এভিপ্লেয়ারগুলি ব্যবহার করুন (কাজ করবে না)
~ 10 AVPPlayer
অবজেক্ট ব্যবহার করে এবং সমস্ত ~ 10 টি ক্লিপগুলি শুরু করুন এবং বিরতি দিন এবং একবার আমরা যখন জানতে পারি যে আমাদের কোনটি সত্যই প্রয়োজন, স্যুইচ করুন এবং সঠিকটি বিরতি দিন AVPlayer
এবং পরবর্তী চক্রটির জন্য আবার সমস্ত শুরু করুন।
আমি মনে করি এটি কাজ করে না, কারণ আমি পড়েছি AVPlayer's
আইওএসে মোটামুটি 4 সক্রিয় সীমাবদ্ধতা রয়েছে । এখানে স্ট্যাকওভারফ্লোতে কেউ একজন জিজ্ঞাসা করেছিল এবং 4 টি অ্যাভিপ্লেয়ার সীমা সম্পর্কে জানতে পেরেছিল: দ্রুত-স্যুইচিং-মধ্যে-ভিডিও-ব্যবহার-অ্যাফাউন্ডেশন
আইডিয়া 2: AVQueuePlayer ব্যবহার করুন (কাজ করবে না)
আমি বিশ্বাস করি না যে 10 এলোমেলো AVPlayerItems
করা AVQueuePlayer
সমস্ত বিরামবিহীন শুরুর জন্য প্রি-লোড করবে। AVQueuePlayer
এটি একটি সারি, এবং আমি মনে করি এটি সত্যই কেবলমাত্র তাত্ক্ষণিক প্লেব্যাকের জন্য কাতারে থাকা পরবর্তী ভিডিও তৈরি করে। আমি জানি না যে 10 টি ভিডিওর মধ্যে কোনটি আমরা আবার খেলতে চাই, তা না শুরু করার আগ পর্যন্ত। iOS-avplayer-ভিডিও-প্রিলোডিং
আইডিয়া 3: লোড, খেলুন এবং AVPlayerItems
পটভূমিতে ধরে রাখুন (এখনও 100% নিশ্চিত নয় - তবে ভাল দেখাচ্ছে না)
আমি দেখছি যে পটভূমিতে প্রতিটি ভিডিও ক্লিপের প্রথম দ্বিতীয়টি লোড করা এবং প্লে করার কোনও সুবিধা আছে (ভিডিও এবং অডিও আউটপুট দমন করুন) এবং প্রতিটিটির একটি রেফারেন্স রাখুন AVPlayerItem
এবং যখন আমরা জানি যে কোন আইটেমটি খেলতে হবে when বাস্তব, এটিকে একটিতে অদলবদল করুন এবং সক্রিয় একের সাথে পটভূমি AVPlayer স্যুপ করুন। পাখলান পুনরাবৃত্তি.
তত্ত্বটি হ'ল যে সাম্প্রতিক সময়ে খেলে নেওয়া AVPlayer/AVPlayerItem
এখনও কিছু প্রস্তুত সংস্থান রাখতে পারে যা পরবর্তী প্লেব্যাকটি আরও দ্রুত তৈরি করে। এখনও অবধি আমি এর থেকে উপকারগুলি দেখিনি, তবে AVPlayerLayer
পটভূমির জন্য আমার সঠিকভাবে সেটআপ নাও থাকতে পারে । আমি সন্দেহ করি এটি যা দেখেছে তার থেকে জিনিসগুলি সত্যই উন্নত করবে।
আইডিয়া 4: একটি আলাদা ফাইল ফর্ম্যাট ব্যবহার করুন - সম্ভবত এমন একটি যা লোড করা দ্রুত?
আমি বর্তমানে .m4v এর (ভিডিও-এমপিইজি 4) এইচ .264 ফর্ম্যাটটি ব্যবহার করছি। এইচ .264 এর বিভিন্ন কোডেক অপশন রয়েছে, সুতরাং এটি সম্ভব যে কিছু অপশন অন্যদের চেয়ে দ্রুততর হয়। আমি খুঁজে পেয়েছি যে আরও উন্নত সেটিংস ব্যবহার করে যা ফাইলের আকারকে আরও ছোট করে তোলে তা চেষ্টা করার সময় বাড়িয়ে দেয়, তবে অন্য কোনও উপায় খুঁজে পায় না options
আইডিয়া 5: ক্ষতিহীন ভিডিও ফর্ম্যাট + AVQueuePlayer এর সংমিশ্রণ
যদি এমন কোনও ভিডিও ফর্ম্যাট থাকে যা লোড করা দ্রুত হয় তবে ফাইলের আকারটি যেখানে উন্মাদ, সেখানে একটি ধারণা হতে পারে যে প্রতিটি ভিডিও ক্লিপটির প্রথম 10 সেকেন্ড এমন সংস্করণ সহ প্রস্ফুটিত হবে যা দ্রুত এবং লোড করা দ্রুত, তবে ফিরে H.264 এ এনকোড করা একটি সম্পদ সহ এটি আপ। একটি AVQueuePlayer ব্যবহার করুন, এবং সঙ্কুচিত ফাইল ফর্ম্যাটে প্রথম 10 সেকেন্ড যুক্ত করুন, এবং এটি H.264 এর সাথে প্রস্তুত করুন যা 10 সেকেন্ড অবধি প্রস্তুত / প্রিলোড সময় পায়। সুতরাং আমি উভয় বিশ্বের 'সেরা' পেতে চাই: দ্রুত শুরুর সময়গুলি, তবে আরও কমপ্যাক্ট ফর্ম্যাট থেকেও উপকৃত হয়।
আইডিয়া 6: একটি মানহীন AVPlayer ব্যবহার করুন / আমার নিজের লিখুন / অন্য কারও ব্যবহার করুন
আমার প্রয়োজন হিসাবে, সম্ভবত আমি AVPlayer ব্যবহার করতে পারি না, তবে AVAssetReader অবলম্বন করতে হবে, এবং প্রথম কয়েক সেকেন্ড ডিকোড করতে হবে (সম্ভবত ডিস্কে কাঁচা ফাইল লিখতে হবে), এবং যখন প্লেব্যাক আসে, এটি খেলতে কাঁচা বিন্যাসটি ব্যবহার করুন দ্রুত ফিরে। আমার কাছে এটি একটি বিশাল প্রকল্পের মতো বলে মনে হচ্ছে এবং যদি আমি এটি নির্মোহভাবে চালিয়ে যাই তবে এটি অস্পষ্ট / এমনকি আরও ভাল কাজ করার সম্ভাবনা নেই। প্রতিটি ডিকোডড এবং কমপ্রেসড ভিডিও ফ্রেমটি ২.২৫ এমবি। নির্লজ্জভাবে বলতে - যদি আমরা ভিডিওটির জন্য ~ 30 fps নিয়ে যাই তবে আমি ~ 60 এমবি / এস-পড়ার-থেকে-ডিস্কের প্রয়োজনীয়তাটি শেষ করতাম, যা সম্ভবত অসম্ভব / এড়ানো। স্পষ্টতই আমাদের কিছু স্তরের চিত্র সংকোচনের করতে হবে (সম্ভবত দেশী ওপেনজিএল / এস সংক্ষেপণ ফর্ম্যাটগুলি পিভিআরটিসি এর মাধ্যমে) ... তবে এটি দুর্দান্ত পাগল। সম্ভবত সেখানে একটি লাইব্রেরি আছে যা আমি ব্যবহার করতে পারি?
আইডিয়া 7: সবকিছুকে একটি একক চলচ্চিত্রের সম্পদে, এবং অনুসন্ধান টোটাইমে একত্র করুন
উপরের কিছুগুলির চেয়ে সহজ হতে পারে এমন একটি ধারণা হ'ল সবকিছুকে একক সিনেমায় একত্রিত করা, এবং টুকটাইম ব্যবহার করা। জিনিসটি হ'ল আমরা জায়গাটির চারপাশে ঝাঁপিয়ে পড়ছি। মুভিতে মূলত এলোমেলো অ্যাক্সেস। আমি মনে করি এটি আসলে ঠিকঠাক হয়ে উঠতে পারে: অ্যাভপ্লেয়ার-মুভি-প্লে-লেগ-ইন-আইওএস 5
আপনি কোন পদ্ধতির সেরা বলে মনে করেন? এখনও পর্যন্ত, আমি পিছিয়ে পড়া কমানোর ক্ষেত্রে এতটা অগ্রগতি করতে পারি নি।