মিডিয়া ক্যাপচার এবং সীমাবদ্ধতা

WebRTC-এর মিডিয়া অংশটি কভার করে যে কীভাবে ভিডিও এবং অডিও ক্যাপচার করতে সক্ষম হার্ডওয়্যার অ্যাক্সেস করা যায়, যেমন ক্যামেরা এবং মাইক্রোফোন, সেইসাথে মিডিয়া স্ট্রিমগুলি কীভাবে কাজ করে। এটি ডিসপ্লে মিডিয়াকেও কভার করে, যেভাবে একটি অ্যাপ্লিকেশন স্ক্রিন ক্যাপচারিং করতে পারে।

মিডিয়া ডিভাইস

ব্রাউজার দ্বারা সমর্থিত সমস্ত ক্যামেরা এবং মাইক্রোফোনগুলি navigator.mediaDevices অবজেক্টের মাধ্যমে অ্যাক্সেস এবং পরিচালনা করা হয়। অ্যাপ্লিকেশনগুলি সংযুক্ত ডিভাইসগুলির বর্তমান তালিকা পুনরুদ্ধার করতে পারে এবং পরিবর্তনগুলির জন্যও শুনতে পারে, যেহেতু অনেক ক্যামেরা এবং মাইক্রোফোনগুলি USB-এর মাধ্যমে সংযুক্ত হয় এবং অ্যাপ্লিকেশনের জীবনচক্রের সময় সংযুক্ত এবং সংযোগ বিচ্ছিন্ন হতে পারে৷ যেহেতু একটি মিডিয়া ডিভাইসের অবস্থা যেকোনো সময় পরিবর্তিত হতে পারে, তাই এটি বাঞ্ছনীয় যে অ্যাপ্লিকেশনগুলি সঠিকভাবে পরিবর্তনগুলি পরিচালনা করার জন্য ডিভাইসের পরিবর্তনের জন্য নিবন্ধন করুন৷

সীমাবদ্ধতা

মিডিয়া ডিভাইসগুলি অ্যাক্সেস করার সময়, যতটা সম্ভব বিস্তারিত সীমাবদ্ধতা প্রদান করা একটি ভাল অভ্যাস। যদিও একটি সাধারণ সীমাবদ্ধতার সাথে ডিফল্ট ক্যামেরা এবং মাইক্রোফোন খোলা সম্ভব, এটি এমন একটি মিডিয়া স্ট্রিম সরবরাহ করতে পারে যা অ্যাপ্লিকেশনের জন্য সবচেয়ে অনুকূল থেকে অনেক দূরে।

নির্দিষ্ট সীমাবদ্ধতাগুলি একটি MediaTrackConstraint অবজেক্টে সংজ্ঞায়িত করা হয়েছে, একটি অডিওর জন্য এবং একটি ভিডিওর জন্য৷ এই বস্তুর বৈশিষ্ট্যগুলি হল ConstraintLong , ConstraintBoolean , ConstraintDouble বা ConstraintDOMString টাইপ। এগুলি হয় একটি নির্দিষ্ট মান (যেমন, একটি সংখ্যা, বুলিয়ান বা স্ট্রিং), একটি পরিসর ( LongRange বা ন্যূনতম এবং সর্বাধিক মান সহ DoubleRange রেঞ্জ) বা একটি ideal বা exact সংজ্ঞা সহ একটি বস্তু হতে পারে। একটি নির্দিষ্ট মানের জন্য, ব্রাউজার যতটা সম্ভব কাছাকাছি কিছু বাছাই করার চেষ্টা করবে। একটি ব্যাপ্তির জন্য, সেই ব্যাপ্তির সেরা মানটি ব্যবহার করা হবে৷ যখন exact নির্দিষ্ট করা হয়, শুধুমাত্র সেই সীমাবদ্ধতার সাথে মেলে এমন মিডিয়া স্ট্রিমগুলি ফেরত দেওয়া হবে।

কাছাকাছি

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

পরিসর

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

সঠিক

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

একটি মিডিয়া স্ট্রীমের একটি নির্দিষ্ট ট্র্যাকের প্রকৃত কনফিগারেশন নির্ধারণ করতে, আমরা MediaStreamTrack.getSettings() কল করতে পারি যা বর্তমানে প্রয়োগ করা MediaTrackSettings প্রদান করে৷

আমরা খোলা একটি মিডিয়া ডিভাইস থেকে একটি ট্র্যাকের সীমাবদ্ধতা আপডেট করাও সম্ভব, ট্র্যাকে applyConstraints() কল করে। এটি একটি অ্যাপ্লিকেশনকে প্রথমে বিদ্যমান স্ট্রীম বন্ধ না করে একটি মিডিয়া ডিভাইস পুনরায় কনফিগার করতে দেয়৷

ডিসপ্লে মিডিয়া

একটি অ্যাপ্লিকেশন যা স্ক্রিন ক্যাপচারিং এবং রেকর্ডিং করতে সক্ষম হতে চায় তাকে অবশ্যই ডিসপ্লে মিডিয়া API ব্যবহার করতে হবে। getDisplayMedia() ফাংশন (যা navigator.mediaDevices এর অংশ হল getUserMedia() এর মতো এবং ডিসপ্লের বিষয়বস্তু খোলার উদ্দেশ্যে ব্যবহার করা হয় (অথবা এটির একটি অংশ, যেমন একটি উইন্ডো)। ফিরে আসা MediaStream কাজ করে getUserMedia() ব্যবহার করার সময় একই।

getDisplayMedia() এর সীমাবদ্ধতাগুলি নিয়মিত ভিডিও বা অডিও ইনপুটের জন্য ব্যবহৃত সীমাবদ্ধতার থেকে আলাদা।

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

উপরের কোড স্নিপেট দেখায় কিভাবে স্ক্রীন রেকর্ডিং এর জন্য বিশেষ সীমাবদ্ধতা কাজ করে। মনে রাখবেন যে ডিসপ্লে মিডিয়া সমর্থন আছে এমন সমস্ত ব্রাউজার দ্বারা এটি সমর্থিত নাও হতে পারে৷

স্ট্রীম এবং ট্র্যাক

একটি MediaStream মিডিয়া বিষয়বস্তুর একটি স্ট্রিম প্রতিনিধিত্ব করে, যা অডিও এবং ভিডিওর ট্র্যাক ( MediaStreamTrack ) নিয়ে গঠিত। আপনি MediaStream.getTracks() এ কল করে MediaStream থেকে সমস্ত ট্র্যাক পুনরুদ্ধার করতে পারেন, যা MediaStreamTrack অবজেক্টের একটি অ্যারে প্রদান করে।

মিডিয়াস্ট্রিমট্র্যাক

একটি MediaStreamTrack একটি kind সম্পত্তি আছে যা হয় audio বা video , এটি যে ধরনের মিডিয়া প্রতিনিধিত্ব করে তা নির্দেশ করে। প্রতিটি ট্র্যাক তার enabled সম্পত্তি টগল করে নিঃশব্দ করা যেতে পারে। একটি ট্র্যাকের একটি বুলিয়ান প্রপার্টি remote রয়েছে যা নির্দেশ করে যে এটি একটি RTCPeerConnection দ্বারা উত্স করা হয়েছে এবং একটি দূরবর্তী পিয়ার থেকে আসছে কিনা৷