مقدمه

در درس قبل با نحوه‌ی قراردادن تصاویر در صفحات وب آشنا شدیم. بحث در مورد افزودن مالتی‌مدیا به صفحات وب را با فایل‌های ویدیویی و صوتی در این درس ادامه می‌دهیم. از زمان معرفی HTML5 با معرفی دو عنصر video و audio کار قرار دادن این فایل‌ها در صفحات وب بسیار ساده‌تر از قبل شده است. در این درس، با جزئیات مربوط به این دو عنصر و نحوه‌ی استفاده از آنها برای قرار دادن ویودیوها و فایل‌های صوتی در صفحات وب آشنا خواهیم شد. در این راستا، ابتدا در مورد فایل‌های صوتی و عنصر audio و سپس، در مورد عنصر video و فایل‌های ویدیویی صحبت می‌کنیم و در بخش پایانی این درس با نحوه‌ی افزودن زیرنویس و caption به فایل‌های مالتی‌مدیا آشنا می‌شویم.

صداها و فایل‌های صوتی در وب

برای جاسازی محتوای صوتی در صفحات وب، از یک عنصر HTML با نام audio استفاده می‌شود. این عنصر می‌تواند شامل یک یا چند منبع صدا باشد که با استفاده از صفت src یا عنصر source مشخص می‌شوند. اگر بیش از یک منبع صدا را برای یک عنصر audio تعیین کرده باشیم، مرورگر بهترین گزینه را انتخاب می‌کند.

در مثال زیر، یک عنصر audio درون یک عنصر figure ایجاد شده و منبع صدا برای این عنصر با استفاده از صفت src مشخص شده است. همچنین، یک صفت بولین مربوط به عنصر audio با نام controls نیز به کار گرفته شده که موجب نمایش دکمه‌های کنترلی مانند play/pause می‌شود.

Copy Icon HTML
<figure>
  <figcaption>Listen to new simple happy birthday</figcaption>
  <audio src="multimedia/happy-birthday.mp3" controls>
    Your browser doesn't support 
    the <code>audio</code> element.
  </audio>
</figure>

همانطور که می‌بینید، در این مثال متنی نیز درون عنصر audio قرار داده شده است. به طور کلی محتوای عنصر audio تنها برای کاربرانی نمایش داده می‌شود که مرورگر آنها از عنصر audio پشتیبانی نمی‌کند. بنابراین، می‌توانیم همانند مثال بالا متن مناسبی که عدم پشتیبانی مرورگر کاربر از عنصر audio را نشان دهد، درون عنصر audio قرار دهیم.

اما از آنجایی که همه‌ی مرورگرها از فرمت‌ها و کدک‌های صوتی یکسانی پشتیبانی نمی‌کنند، می‌توانیم همانند مثال زیر به جای صفت src از تعدادی عنصر source استفاده کنیم که هر کدم از آنها حاوی یک ورژنِ دارای یک فرمت مشخص از فایل صوتی باشد. در ضمن، این بار درون عنصر audio لینکی به فایل مورد نظر قرار داده‌ایم تا کاربرانی که مرورگرشان قادر به پشتیبانی از عنصر audio نیست، بتوانند از طریق این لینک به فایل صوتی مورد نظر دسترسی داشته باشند.

Copy Icon HTML
<audio controls>
  <source src="multimedia/happy-birthday.mp3" type="audio/mpeg">
  <source src="multimedia/happy-birthday.ogg" type="audio/ogg">
  <p>
    Your browser doesn't support 
    audio element. You can <a href="multimedia/happy-birthday.mp3">Download audio</a> instead.
  </p>
</audio>

عنصر audio علاوه بر صفت‌های عمومی، دارای تعدادی صفت اختصاصی نیز هست که در ادامه، این صفت‌ها را بررسی کرده و مثال‌هایی از آنها ارائه می‌دهیم.

تعیین آدرس فایل صوتی با صفت src

همانطور که قبلاً هم گفتیم، صفت src آدرس url یک فایل صوتی را به عنوان مقدار دریافت می‌کند. البته استفاده از این صفت اختیاری است و به جای آن می‌توانیم از عنصر source به عنوان عنصر فرزند audio استفاده کنیم.

نمایش دکمه‌های کنترلی پلیر با صفت controls

صفت controls را نیز در مثال‌های بالا دیدیم و گفتیم که یک صفت بولین است که با نمایش دکمه‌هایی نظیر play/pause و volume به کاربر امکان می‌دهد که روی فرایند پخش صدا کنترل داشته باشد.

پخش خودکار فایل صوتی با صفت autoplay

صفت autoplay یک صفت بولین است که استفاده از آن باعث می‌شود که فایل صوتی به محض آماده شدن برای پخش و بدون منتظر ماندن برای تکمیل فرایند دانلود کل فایل و پخش توسط کاربر، شروع به پخش کند. البته باید بدانید که پخش خودکار یک فایل صوتی، برای کاربران سایت تجربه‌ی خوشایندی به همراه ندارد و باید حتی‌الامکان از این کار اجتناب کنید. با این حال، در کد زیر مثالی از این صفت می‌بینید.

Copy Icon HTML
<audio autoplay controls>
  <source src="multimedia/happy-birthday.mp3" type="audio/mpeg">
  Your browser doesn't support the audio element.
</audio>

تکرار پخش فایل صوتی با صفت loop

loop نیز یک صفت بولین دیگر از عنصر audio است که استفاده از آن باعث تکرار فرایند پخش فایل صوتی مورد نظر می‌شود. کد زیر مثالی از این صفت بولین ارائه می‌دهد.

Copy Icon HTML
<audio loop controls>
  <source src="multimedia/happy-birthday.mp3" type="audio/mpeg">
  Your browser doesn't support the audio element.
</audio>

پخش فایل صوتی به صورت بیصدا با صفت muted

استفاده از صفت بولین muted موجب می‌شود که فایل صوتی در بدو کار به صورت بیصدا پخش شود. البته در صورت وجود صفت controls کاربر می‌تواند هر زمان که مایل باشد، حالت بیصدا را غیرفعال کند. مثال زیر را ببینید.

Copy Icon HTML
<audio muted controls>
  <source src="multimedia/happy-birthday.mp3" type="audio/mpeg">
  Your browser doesn't support the audio element.
</audio>

تعیین نحوه بارگذاری فایل صوتی با صفت preload

با استفاده از صفت preload می‌توانیم به مرورگر اعلام کنیم که بهتر است هنگام بارگذاری محتوای صفحه، فایل صوتی مورد اشاره‌ی عنصر audio را دانلود کند یا اینکه این کار را تا زمان پخش فایل توسط کاربر به تعویق اندازد. البته هدف صفت preload فقط این است که به ما امکان دهد که نظرمان را در مورد نحوه‌ی بارگذاری فایل صوتی به مرورگر اعلام کنیم. مطابق مستندات HTML مرورگرها ملزم به به‌کارگیری مقداری که برای این صفت تعیین می‌کنیم، نیستند. اما با این حال، می‌توانیم روشی را که از نظر ما منجر به بهترین تجربه‌ی کاربری می‌شود، به مرورگر اعلام کنیم. این صفت می‌تواند یکی از مقادیر زیر را دریافت کند:

  • none: نیازی به بارگذاری زودهنگام و قبل از نیاز (preload) فایل صوتی نیست.
  • metadata: تنها اطلاعات متادیتای مربوط به فایل مانند مدت زمان فایل و مواردی از این قبیل، زودتر از موعد بارگذاری شود.
  • auto: فارغ از اینکه کاربر بخواهد فایل را پخش کند یا خیر، کل فایل دانلود شود. تخصیص یک رشته‌ی خالی به صفت preload نیز معادل همین مقدار است.

توجه داشته باشید که صفت autoplay نسبت به preload دارای اولویت است. اگر صفت autoplay به کار گرفته شده باشد، طبیعتاً فایل باید در سریع‌ترین زمان ممکن دانلود شود تا امکان پخش حودکار آن وجود داشته باشد. به عبارت دیگر، در صورت استفاده از صفت autoplay مرورگر اقدام به بارگیری فایل مورد نظر می‌کند و استفاده از صفت preload دیگر معنایی ندارد.

فیلم‌ها و فایل‌های ویدیویی در وب

برای قرار دادن یا جاسازی یک ویدیو در صفحات وب، می‌توانیم از عنصر video استفاده کنیم. کار با این عنصر شباهت زیادی به عنصر audio دارد. براي قرار دادن یک ویدیو در صفحه باید از عناصر source درون عنصر video استفاده کنیم.

Copy Icon HTML
<video width="250" controls>
  <source src="multimedia/walking.webm" type="video/webm">
  <source src="multimedia/walking.mp4" type="video/mp4">
  Your browser doesn't support video element.
</video>

کد بالا شامل یک مثال ساده از عنصر video است اما همانند آنچه در مورد عنصر audio نیز دیدیم، صفت‌های دیگری برای عنصر video در دسترس و قابل تنظیم است که از طریق آنها می‌توانیم مواردی مانند ابعاد باکس player، نمایش یا عدم نمایش دکمه‌های کنترلی، تعداد دفعات پخش ویدیو و موارد دیگر را تعیین کنیم.

صفت‌های src، controls، muted، loop، autoplay و preload و نقش آنها را هنگام بررسی عنصر audio دیدیم و در اینجا از تکرار بی‌مورد آنها خودداری می‌کنیم. اما عنصر video صفت‌های دیگری هم دارد که در ادامه آنها را معرفی می‌کنیم.

پیشنهاد به مرورگر در مورد کنترل‌ها با صفت controlslist

وقتی از صفت controls استفاده می‌کنیم، مرورگرها لیستی از کنترل‌های مورد نظرشان را نمایش می‌دهند و کاربر می‌تواند از آنها استفاده کند. اما صفت controlslist به ما امکان می‌دهد که به مرورگر در مورد تصمیم‌گیری در مورد این کنترل‌ها کمک کنیم. البته صفت controlslist یک صفت جدید است که در فاز آزمایشی (experimental) قرار دارد و در حال حاضر، یک مکانیسم blocklist را پیاده‌سازی می‌کند که با دریافت هر یک از مقادیر زیر، نمایش یک کنترل مربوط به آن مقدار را منتفی می‌کند:

  • nofullscreen: با استفاده از این مقدار، به مرورگر پیشنهاد داده می‌شود که قید نمایش کنترل fullscreen را که باعث نمایش ویدیو به صورت تمام‌صفحه می‌شود، بزند.
  • nodownload: با استفاده از این مقدار، به مرورگر پیشنهاد داده می‌شود که از نمایش کنترل download برای کاربر جلوگیری شود.

اما در مورد صفت controlslist باید به چند نکته توجه داشته باشید: اول اینکه، در صورت تمایل، می‌توانیم برای این صفت از بیش از یک مقدار استفاده کنیم که در این صورت، مقادیر را باید با فاصله از هم جدا کنیم. نکته‌ی دوم اینکه، اگر دقت کرده باشید ما از لفظ پیشنهاد برای مقادیر این صفت استفاده کردیم و دلیل این امر آن است که مرورگر می‌تواند مقداری را که برای این صفت وارد کرده‌ایم، بپذیرد یا اینکه آن را رد کند. برای نمونه، یک مرورگر موبایل ممکن است با توجه به کوچک بودن نمایشگرش، مقدار nofullscreen را از شما نپذیرد و کنترل fullscreen را نمایش دهد.

Copy Icon HTML
<video controls src="demo.webm" controlslist="nofullscreen nodownload">
  Your browser doesn't support video element.
</video>

نمایش پوستر ویدیو با صفت poster

با استفاده از صفت poster می‌توانیم تصویری را به مرورگر معرفی کنیم تا هنگامی که ویدیو در حال بارگذاری است، آن را نمایش دهد. با این حساب، مقداری که این صفت می‌تواند دریافت کند، آدرس url مربوط به یک نصویر است. اگر از این صفت استفاده نکنیم، تا قبل از آماده شدن نخستین فریم ویدیو، چیزی نمایش داده نمی شود و پس از آن، این فریم ابتدایی به عنوان فریم پوستر نشان داده می‌شود.

Copy Icon HTML
<video width="320" height="240" poster="poster.png" controls>
  <source src="walking.mp4" type="video/mp4">
</video>

افزودن زیرنویس به عناصر مالتی‌مدیا

برای عناصر مدیا یعنی video و audio امکان استفاده از یک عنصر فرزند با نام track وجود دارد. کاربرد این عنصر، افزودن ترک‌های متنی زمان‌بندی شده از قبیل caption و زیرنویس است. فرمت این فایل های متنی باید Web VTT (.vtt) باشد که اختصاری است برای Web Video Text Format.

Copy Icon HTML
<video width="320" height="240" controls>
  <source src="walking.mp4" type="video/mp4">
  <track src="subtitle-en.vtt" srclang="en">
</video>

این عنصر دارای چند صفت است که در اینجا از آنها نام می‌بریم:

  • src: این صفت، یک آدرس url را که به فایل متنی مورد نظر اشاره می‌کند، به عنوان مقدار دریافت می‌کند.
  • srclang: این صفت مشخص‌کننده‌ی زبان به کار رفته در فایل متنی مورد نظر است.
  • default: از این صفت برای انتخاب track متنی پیش‌فرض استفاده می‌شود.
  • kind: این صفت مشخص‌کننده‌ی نوع کاربری track متنی مورد نظر است که می‌تواند زیرنویس، caption یا گزینه‌های دیگر باشد.
  • label: از این صفت برای تعیین عنوان track متنی استفاده می‌شود.

اما اجازه دهید هر یک از این صفت‌ها را یه صورت جداگانه و با ارائه‌ی جزئیات بیشتر بررسی کنیم.

تعیین آدرس و زبان زیرنویس با صفت‌های src و srclang

صفت src مطابق انتظار، مشخص‌کننده‌ی فایل متنی مورد نظر است و بنابراین، یک url را به عنوان مقدار دریافت می‌کند. صفت srclang نیز همانطور که از نامش پیداست، برای اعلام زبان فایل متنی مورد اشاره کاربرد دارد. در مثال بالا نحوه‌ی استفاده از این دو عنصر را دیدیم.

تعیین track متنی پیش فرض با صفت default

وقتی بیش از یک عنصر track را درون یک عنصر مدیا مانند video قرار داده باشیم، کاربر می‌تواند هنگام پخش ویدیو یک track را انتخاب کند. اما به هر حال، باید یکی از این ترک‌ها در حالت پیش‌فرض فعال باشد و صفت default با همین هدف یعنی تعیین track پیش‌فرض تعریف شده است. صفت default یک صفت بولین است که باید برای هر عنصر track که مایلیم ترک پیش‌فرض باشد، به کار رود. مثال زیر را ببینید.

Copy Icon HTML
<video width="320" height="240" controls>
  <source src="walking.mp4" type="video/mp4">
  <track src="subtitle-en.vtt" srclang="en" default>
  <track src="subtitle-fa.vtt" srclang="fa">
</video>

تعیین عنوان track متنی با صفت label

از صفت label برای تعیین برچسب یا عنوان ترک‌های متنی استفاده می‌شود. این عنوان در لیست ترک‌هایی که مرورگر برای کاربر نمایش می‌دهد، استفاده می‌شود.

Copy Icon HTML
<video width="320" height="240" controls>
  <source src="walking.mp4" type="video/mp4">
  <track src="subtitle-en.vtt" srclang="en" label="English" default>
  <track src="subtitle-fa.vtt" srclang="fa" label="Persian">
</video>

تعیین نوع track متنی با صفت kind

با استفاده از صفت kind می‌توانیم نوع ترک متنی را مشخص کنیم. منظور از نوع یک ترک متنی کاربری یا مورد استفاده‌ی آن است که با یکی از مقادیر زیر قابل تعیین است:

  • subtitles: این مقدار زمانی استفاده می‌شود که هدف ما از استفاده از ترک متنی مورد نظر، ارائه‌ی یک ترجمه از محتوایی باشد که ممکن است برای کاربر قابل درک نباشد. برای نمونه، متن یا دیالوگی از فیلم که به زبان دیگری به جز زبان اصلی فیلم باشد. همچنین، این مقدار برای مواردی که ترک متنی شامل اطلاعات اضافی و پس‌زمینه‌ای در مورد محتواست، مناسب است. برای مثال، می‌توانیم به متن ابتدای فیلم‌های جنگ ستارگان اشاره کنیم و یا متنی که نشان‌دهنده‌ی تاریخ، زمان یا لوکیشن در یک پلان از یک فیلم است.
  • captions: این مقدار را زمانی به صفت kind اختصاص می‌دهیم که فایل متنی مورد نظر حاوی یک آوانویسی یا احیاناً یک ترجمه برای صدای فیلم باشد. همچنین، این مقدار می‌تواند برای مواردی که ترک متنی مورد نظر شامل اطلاعات مهم غیرکلامی مانند افکت‌های صوتی یا ردیف‌های موسیقی است، به کار رود.
  • metadata: این مقدار برای ترک‌های متنی که توسط اسکریپت‌ها مورد استفاده قرار می‌گیرند و برای کاربر قابل مشاهده نیستند، مناسب است.