স্ট্রিমিং রিসোর্সগুলি কীভাবে রেস্টস্টুলের দৃষ্টান্তের মধ্যে ফিট করে?


101

একটি রেস্টলফুল সার্ভিসের সাহায্যে আপনি সংস্থান তৈরি করতে, পড়তে, আপডেট করতে এবং মুছতে পারেন। আপনি যখন একটি ডাটাবেস সম্পদের মতো কোনও কিছু নিয়ে কাজ করেন তখন এই সমস্তই ভাল কাজ করে - তবে কীভাবে এটি স্ট্রিমিং ডেটাতে অনুবাদ করে? (বা এটি করে?) উদাহরণস্বরূপ, ভিডিওর ক্ষেত্রে, প্রতিটি ফ্রেমটিকে উত্স হিসাবে বিবেচনা করা নির্বোধ বলে মনে হয় যে আমার একবারে একটি জিজ্ঞাসা করা উচিত। বরং আমি একটি সকেট সংযোগ স্থাপন করব এবং ফ্রেমের একটি সিরিজ প্রবাহিত করব। কিন্তু এটি কি বিশ্রামের দৃষ্টান্তটি ভেঙে দেয়? আমি যদি স্ট্রিমটি রিওয়াইন্ড বা দ্রুত ফরোয়ার্ড করতে সক্ষম হতে চাই? বিশ্রামের দৃষ্টান্তের মধ্যে এটি কি সম্ভব? সুতরাং: স্ট্রিমিং রিসোর্সগুলি কীভাবে বিশ্রামের দৃষ্টান্তের মধ্যে ফিট করে?

বাস্তবায়নের বিষয়টি হিসাবে, আমি এই জাতীয় স্ট্রিমিং ডেটা পরিষেবা তৈরি করতে প্রস্তুত হয়ে যাচ্ছি এবং আমি এটি নিশ্চিত করতে চাই যে আমি এটি "সেরা উপায়ে" করছি। আমি নিশ্চিত যে এই সমস্যাটি এর আগে সমাধান হয়ে গেছে। কেউ কি আমাকে ভাল উপাদানের দিকে নির্দেশ করতে পারে?


2
অবশেষে আপনি কোন বিকল্পটি বেছে নিয়েছিলেন? আপনি জিআরপিসি দেখেছেন? এটি দ্বিপাক্ষিক স্ট্রিমিং সমর্থন করে।
ম্যাক

উত্তর:


80

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

স্ট্রিমিংয়ের দিক থেকে, আমি মনে করি যে আমাদের সমস্যাটি দুটি স্বতন্ত্র অংশে আলাদা করতে হবে:

  1. মিডিয়া রিসোর্সে অ্যাক্সেস (মেটা ডেটা)
  2. মাঝারি / স্ট্রিম নিজেই অ্যাক্সেস (বাইনারি ডেটা)

1.) মিডিয়া সংস্থানগুলিতে অ্যাক্সেস
এটি বেশ সোজা and এবং এটি একটি পরিষ্কার এবং বিশুদ্ধ উপায়ে পরিচালনা করা যেতে পারে। উদাহরণ হিসাবে বলা যাক যে আমাদের একটি এক্সএমএল-ভিত্তিক এপিআই থাকবে যা আমাদের স্ট্রিমগুলির একটি তালিকা অ্যাক্সেস করার অনুমতি দেয়:

GET /media/

<?xml version="1.0" encoding="UTF-8" ?>
<media-list uri="/media">
    <media uri="/media/1" />
    <media uri="/media/2" />
    ...
</media-list>

... এবং স্বতন্ত্র স্ট্রিমগুলিতে:

GET /media/1

<?xml version="1.0" encoding="UTF-8" ?>
<media uri="/media/1">
    <id>1</id>
    <title>Some video</title>
    <stream>rtsp://example.com/media/1.3gp</stream>
</media>

২) মাঝারি / স্ট্রিমের অ্যাক্সেস নিজেই
এটি আরও সমস্যাযুক্ত বিট। আপনি ইতিমধ্যে আপনার প্রশ্নের একটি বিকল্প চিহ্নিত করেছেন এবং তা হ'ল একটি RESTful API এর মাধ্যমে স্বতন্ত্রভাবে ফ্রেমে অ্যাক্সেসের অনুমতি দেওয়া। যদিও এটি কার্যকর হতে পারে, আমি আপনার সাথে একমত যে এটি একটি কার্যকর বিকল্প নয়।

আমি মনে করি যে এর মধ্যে একটি পছন্দ করা উচিত:

  1. বিশেষ স্ট্রিমিং প্রোটোকল (যেমন আরটিএসপি) এর মাধ্যমে একটি উত্সর্গীকৃত পরিষেবাতে স্ট্রিমিং সরবরাহ করা
  2. HTTP- তে উপলব্ধ বিকল্পগুলি ব্যবহার করে

আমি বিশ্বাস করি প্রাক্তনটি আরও দক্ষ পছন্দ হতে পারে যদিও এর জন্য একটি ডেডিকেটেড স্ট্রিমিং পরিষেবা (এবং / অথবা হার্ডওয়্যার) প্রয়োজন requires এটি RESTful হিসাবে বিবেচনা করা হয় এর প্রান্তে কিছুটা হতে পারে তবে নোট করুন যে আমাদের এপিআই সমস্ত দিক থেকে বিশুদ্ধ এবং যদিও উত্সর্গীকৃত স্ট্রিমিং পরিষেবাটি অভিন্ন ইন্টারফেসের সাথে সম্মতি দেয় না (GET / POST / PUT / DELETE), আমাদের API আছে। আমাদের API আমাদের GET / POST / PUT / DELETE এর মাধ্যমে সংস্থানসমূহ এবং তাদের মেটা ডেটার উপর যথাযথ নিয়ন্ত্রণের অনুমতি দেয় এবং আমরা স্ট্রিমিং পরিষেবাটিতে লিঙ্ক সরবরাহ করি (এভাবে REST এর সংযোগের দিকটি মেনে চলি)।

পরবর্তী বিকল্প - এইচটিটিপি এর মাধ্যমে স্ট্রিমিং - উপরের মতো দক্ষ নাও হতে পারে তবে এটি অবশ্যই সম্ভব। প্রযুক্তিগতভাবে, এটি HTTP- র মাধ্যমে কোনও বাইনারি সামগ্রীতে অ্যাক্সেসের অনুমতি দেওয়ার চেয়ে আলাদা নয়। এক্ষেত্রে আমাদের এপিআই এইচটিটিপি-র মাধ্যমে অ্যাক্সেসযোগ্য বাইনারি সংস্থার একটি লিঙ্ক সরবরাহ করবে এবং সংস্থানটির আকার সম্পর্কেও আমাদের পরামর্শ দেবে:

GET /media/1

<?xml version="1.0" encoding="UTF-8" ?>
<media uri="/media/1">
    <id>1</id>
    <title>Some video</title>
    <bytes>1048576</bytes>
    <stream>/media/1.3gp</stream>
</media>

ক্লায়েন্টটি HTTP ব্যবহার করে রিসোর্সটি অ্যাক্সেস করতে পারে GET /media/1.3gp। ক্লায়েন্টের পুরো সংস্থানটি ডাউনলোড করার জন্য একটি বিকল্প হ'ল - এইচটিটিপি প্রগতিশীল ডাউনলোড । ক্লিনারের পক্ষে এইচটিটিপি রেঞ্জ শিরোনাম ব্যবহার করে সংস্থাগুলিতে রিসোর্স অ্যাক্সেস করার জন্য একটি ক্লিনার বিকল্প হবে । 1MB বড় ফাইলের দ্বিতীয় 256KB অংশ আনার জন্য ক্লায়েন্টের অনুরোধটি এর পরে দেখতে হবে:

GET /media/1.3gp
...
Range: bytes=131072-262143
...

একটি সার্ভার যা রেঞ্জগুলিকে সমর্থন করে তারপরে কন্টেন্ট-রেঞ্জের শিরোনামের সাথে প্রতিক্রিয়া জানাবে এবং তারপরে সংস্থানটির আংশিক প্রতিনিধিত্ব করবে:

HTTP/1.1 206 Partial content
...
Content-Range: bytes 131072-262143/1048576
Content-Length: 1048576
...

মনে রাখবেন যে আমাদের এপিআই ইতিমধ্যে ক্লায়েন্টকে ফাইলের সঠিক আকার বাইটস (1 এমবি) বলেছিল। এমন ক্ষেত্রে যেখানে ক্লায়েন্টটি সংস্থানটির আকার জানবে না, আকার HEAD /media/1.3gpনির্ধারণের জন্য প্রথমে কল করা উচিত , অন্যথায় এটি সার্ভারের প্রতিক্রিয়াটিকে ঝুঁকির মধ্যে ফেলেছে 416 Requested Range Not Satisfiable


2
বাহ ... এটি দুর্দান্ত তথ্য। আপনি এই সম্পর্কে চিন্তা করার কয়েকটি নতুন উপায়ের দিকে আমার দৃষ্টি আকর্ষণ করেছেন। আমি রিয়েল টাইম স্ট্রিমিং প্রোটোকল সম্পর্কেও অসচেতন ছিলাম।
JnBrymn

1
কোনও সমস্যা নয়, আমি আনন্দিত যে আমি সাহায্য করতে পারি। তবে দয়া করে নোট করুন যে ব্যক্তিগতভাবে এখনও স্ট্রিমিং প্রোটোকল নিয়ে কাজ করার সুযোগ আমার হাতে নেই (HTTP- র মাধ্যমে প্রগতিশীল স্ট্রিমিং বাদে)। আমি আরটিএসপিটিকে কেবল উদাহরণ হিসাবে বেছে নিয়েছি, এটি আপনার নির্দিষ্ট দৃশ্যে কার্যকর হতে পারে কিনা তা আমি বলতে পারি না। আপনি বিশেষত স্ট্রিমিং প্রোটোকল সম্পর্কে অন্য একটি SO প্রশ্ন জিজ্ঞাসা করতে পারেন। উইকিপিডিয়া একটি ভাল শুরু অন্যান্য প্রোটোকল বিন্দু উপলব্ধ করা হয় - "প্রোটোকল বিষয়" দেখুন এবং এখানে "আরও দেখুন" বিভাগে: en.wikipedia.org/wiki/Streaming_Media
মাউস

1
ধন্যবাদ এটি এখন পর্যন্ত সহজ এবং প্রযুক্তিগত ব্যাখ্যা।
সিলেন্টসুডো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.