یه فایل JPEG که ویدیو پخش میکنه
خلاصهٔ کاملتر
توی این مقاله اومده که فرمت JPEG یه حالت پیشرونده (progressive) داره: بهجای اینکه عکس یکجا و خطبهخط ذخیره بشه، دادهها توی چند «اسکن» جدا نوشته میشن که هرکدوم یه بازه از ضرایب فرکانسی DCT رو نگه میدارن. اسکن اول یه پیشنمایش خیلی کمکیفیت میده و اسکنهای بعدی جزئیات رو روش سوار میکنن. برای همینه که یه عکس نیمهدانلودشده بهجای اینکه از وسط بریده بشه، تار ولی کامل دیده میشه.
نکتهای که نویسنده روش دست میذاره اینه که هر اسکن صراحتاً بازهٔ خودشو اعلام میکنه، پس هیچی جلوی این رو نمیگیره که اسکن بعدی روی دادهٔ رندرشدهٔ قبلی بنویسه. کافیه چند تصویر با ابعاد یکسان رو پشت سر هم بچسبونی و مارکرهای شروع تصویر، شروع فریم و پایان تصویر رو از وسطشون حذف کنی. روی یه شبکهٔ کند، مرورگر موقع دانلود بین این تصویرها سوییچ میکنه.
مشکل اینجاست که بیشتر دیکودرها بعد از تعداد مشخصی اسکن دست میکشن؛ نویسنده حدس میزنه این سقف رو گذاشتن تا جلوی حملهای شبیه zip bomb گرفته بشه. راهحلش اینه که هر فریم به کمترین تعداد اسکن ممکن برسه: یه اسکن فقط-DC، یعنی فقط پایینترین مؤلفهٔ فرکانسی تصویر. چون DCT روی بلوکهای ۱۶×۱۶ کار میکنه، همچین فریمی یکشونزدهم رزولوشن اصلیه، ولی در عوض کروم تا حدود ۹۰ فریم رو رندر میکنه و فایرفاکس حتی صبورتره.
ساختن این فریمها هم ابزار خاصی نمیخواد، چون تصویر فقط-DC خودش یه JPEG کاملاً استانداردیه. با jpegtran و یه فایل تعریف اسکن میشه هر عکس معمولی رو به این شکل درآورد:
cat > frame.scans <<EOF
# DC only scan:
0,1,2:0-0,0,0;
EOF
jpegtran -scans frame.scans -outfile out.jpg in.jpgبه گفتهٔ نویسنده این ترفند کاربرد عملی نداره: هیچ راهی برای گذاشتن اطلاعات زمانبندی توی فایل نیست، پس سرعت پخش کاملاً دست تأخیر شبکهست. در عوض همین ایدهٔ رندر جزئی جاهای دیگه هم جواب داده؛ نویسنده با تگ dialog یه ویدیوی صرفاً HTML و حتی یه اپلیکیشن تکصفحهای بدون CSS و جاوااسکریپت درست کرده.
نکات کلیدی:
- توی JPEG پیشرونده هر اسکن بازهٔ ضرایب DCT و دقتش رو خودش تعیین میکنه، برای همین اسکن بعدی میتونه تصویر قبلی رو بازنویسی کنه.
- چسبوندن چند تصویر هماندازه و حذف مارکرهای شروع تصویر، شروع فریم و پایان تصویر، یه فایل چندتصویری میسازه.
- دیکودرها سقف تعداد اسکن دارن؛ با فریمهای فقط-DC کروم تا حدود ۹۰ فریم جلو میره.
- فریم فقط-DC یکشونزدهم رزولوشن اصلی رو نشون میده و با jpegtran -scans ساخته میشه.
- زمانبندی پخش قابل کنترل نیست و کاملاً به تأخیر شبکه وابستهست.




