Giới thiệu
Tiêu chuẩn (.swf) – Định dạng tập tin cung cấp hình ảnh, văn bản, phim và âm thanh theo vector trên Internet trong “Đặc tả kỹ thuật định dạng tập tin SWF“, được hỗ trợ bởi phần mềm Adobe Flash Player. Định dạng tập tin (.swf) được thiết kế để trở thành định dạng cung cấp hiệu quả, không phải là định dạng phục vụ trao đổi đồ họa giữa các trình biên tập hình ảnh, do vậy, nó đáp ứng được các yêu cầu như sau:
- Hiển thị trên màn hình (On-screen display): Định dạng chủ yếu dành cho việc hiển thị trên màn hình và tránh được hiện tượng “răng cưa“, hiển thị nhanh đến một biểu diễn của bất kỳ định dạng màu sắc, hoạt họa và nút tương tác.
- Khả năng mở rộng (Extensibility): Định dạng theo kiểu gắn thẻ (tagged format), do đó, nó có thể phát triển các tính năng mới trong khi vẫn duy trì được khả năng tương thích với các phiên bản Flash Palyer trước đây.
- Cung cấp trên mạng (Network delivery): Định dạng có thể truyền qua một mạng với băng thông giới hạn và không thể dự đoán trước. Các tập tin được nén nhỏ và hỗ trợ biểu diễn theo luồng (stream). Định dạng tập tin (.swf) là định dạng nhị phân và người dùng không thể đọc hiểu như HTML. Định dạng tập tin (.swf) sử dụng kỹ thuật đóng gói bít và các cấu trúc với các trường tùy chọn để tối giản kích thước tập tin.
- Đơn giản (Simplicity): Định dạng đơn giản để Flash Player chuyển qua dễ dàng. Ngoài ra, Flash Player còn bị phụ thuộc vào một số các tính năng của hệ điều hành.
- Độc lập với tập tin (File independence): Tập tin hiển thị có sự phụ thuộc tối thiểu với các tài nguyên bên ngoài.
- Khả năng co giãn (Scability): Tập tin hoạt động tốt trên phần cứng bị giới hạn và có thể tận dụng phần cứng tốt hơn khi nó sẵn sàng. Khả năng này rất quan trọng bởi vì các máy tính có độ phân giải và độ rộng màn hình khác nhau.
- Tốc độ (Speed): Đồ họa được mô tả bằng tập tin (.swf) có tốc độ nhanh hơn.
- Khả năng kịch bản hóa (Scriptability): Định dạng chứa các thẻ liên kết cung cấp các chuỗi mã theo byte được hiểu bởi một máy stack. Các mã theo byte này hỗ trợ ngôn ngữ Kịch bản hành động (ActionScript). Flash Player cung cấp một mô hình đối tượng ActionScript theo thời gian chạy cho phép tương tác với các mẫu vẽ hình, các máy chủ và các tính năng của Flash Player.
Đặc tả kỹ thuật của định dạng tập tin SWF được phát triển qua nhiều phiên bản và có một số tên gọi khác nhau. Đầu tiên, định dạng tập tin được công ty FutureWave Software - một công ty phát triển phần mềm ở San Diego, California - đưa ra với một mục tiêu chính là tạo ra các tập tin nhỏ để hiển thị các hoạt cảnh mang tính giải trí. Tháng 5 năm 1996, công ty FutureWave đã chính thức công bố phiên bản đầu tiên với tên gọi là FutureSplash Animator. Sau đó, FutureWave đã bị Macromedia - một công ty thiết kế đồ họa và phát triển Web ở San Francisco, California - mua lại vào tháng 12 năm 1996 và phiên bản đầu tiên này được đổi tên thành Macromedia Flash 1.0. Khi Flash trở nên phổ biến thì Macromedia quyết định xây dựng thương hiệu định dạng của mình với tên gọi là SWF đơn giản. Năm 2005, Adobe mua lại Macromedia, và sau đó, thông qua các đặc tả định dạng SWF là một phần của Dự án Màn hình mở (Open Screen Project). Tháng 7 năm 2008, Adobe đã phát hành mã cho Google và Yahoo để cho phép các công cụ tìm kiếm của họ thu thập và lập chỉ mục các tập tin SWF. Phiên bản hiện tại là Đặc tả kỹ thuật của định dạng tập tin SWF phiên bản 19, được Adobe công bố vào năm 2012.
Các nội dung chính về (.swf)
Các kiểu dữ liệu cơ bản
Các kiểu dữ liệu cơ bản để tạo thành các cấu trúc dữ liệu phức tạp trong định dạng tập tin SWF bao gồm:
- Tọa độ và twips: Định dạng tập tin SWF lưu trữ tất cả các tọa độ x-y dưới dạng số nguyên, thường trong một đơn vị đo lường được gọi là twip. Theo định dạng SWF, một twip là 1/20 của một pixel (điểm ảnh), trong đó một pixel được coi là một pixel màn hình khi tập tin được phát ở mức 100%.
- Kiểu số nguyên và thứ tự của byte: Định dạng tập tin SWF sử dụng kiểu số nguyên có dấu và không dấu dài 8 bít, 16 bít, 32 bít và 64 bít. Tất cả các giá trị được lưu trữ trong tập tin SWF bằng cách sử dụng thứ tự little-endian (byte có trọng số thấp nhất được lưu ở ô nhớ có địa chỉ nhỏ nhất (ô đầu tiên) và byte có trọng số lớn nhất được lưu trữ ở ô nhớ có địa chỉ lớn nhất (ô cuối cùng)). Các bít trong các byte của định dạng tập tin SWF được lưu trữ theo thứ tự big-endian (byte có trọng số thấp nhất được lưu ở ô nhớ có địa chỉ lớn nhất (ô cuối cùng) và byte có trọng số lớn nhất được lưu trữ ở ô nhớ có địa chỉ nhỏ nhất (ô đầu tiên)). Tất cả các số nguyên phải là byte-aligned (bít đầu tiên của giá trị số nguyên phải được lưu trữ trong bít đầu tiên của một byte trong tập tin SWF).
- Số dấu chấm tĩnh (Fixed-point numbers): Định dạng tập tin SWF hỗ trợ hai kiểu số dấu chấm tĩnh dạng 32 bít và 16 bít. Số dấu chấm tĩnh theo 32 bít là 16.16, tức là 16 bít cao biểu diễn số lượng trước dấu thập phân và 16 bít thấp biểu diễn số lượng sau dấu thập phân. Các giá trị FIXED được lưu trữ giống như các số nguyên 32 bít trong tập tin SWF (sử dụng thứ tự little-endian) và phải là byte-aligned. Có 2 kiểu chấm tĩnh là FIXED (số dấu chấm tĩnh 16.16 theo 32 bít) và FIXED8 (số dấu chấm tĩnh 8.8 theo 16 bít).
- Số dầu chấm động (Floating-point numbers): Định dạng SWF phiên bản 8 trở đi hỗ trợ việc sử dụng tiêu chuẩn IEEE 754 với các kiểu dấu chấm động gồm FLOAT16, FLOAT và DOUBLE.
- Số nguyên được mã hóa: Định dạng SWF phiên bản 9 trở đi hỗ trợ việc sử dụng các số nguyên được mã hóa bởi số lượng byte biến thiên. Kiểu số nguyên mã hóa được hỗ trợ là kiểu dấu chấm động EncodedU32.
- Các giá trị bit: là các trường có độ dài biến thiên có thể biểu diễn 3 kiểu số là số nguyên không dấu, số nguyên có dấu và các giá trị dấu chấm tĩnh 16.16 có dấu.
- Các giá trị kiểu chuỗi: biểu diễn chuỗi ký tự, định dạng cho một giá trị chuỗi là một danh sách tuần tự các byte được kết thúc bởi một byte ký tự rỗng (null).
- Mã ngôn ngữ: xác định một ngôn ngữ sử dụng trong văn bản. Mã ngôn ngữ có liên quan với đặc tả kỹ thuật phông chữ trong định dạng tập tin SWF. Lưu ý rằng mã ngôn ngữ không đặc tả cách mã hóa văn bản mà nó chỉ đưa ra ngôn ngữ được sử dụng trong văn bản.
- Các bản ghi màu sắc: Bản ghi màu sắc RGB biểu diễn giá trị màu đỏ, xanh lá cây và xanh da trời có độ dài 24 bít. Bản ghi RGBA biểu diễn giá trị màu đỏ, xanh lá cây và xanh da trời có độ dài 32 bít. Giá trị alpha của RGBA nằm trong khoảng từ 0à255. Bản ghi ARGB giống với bản ghi RGBA nhưng giá trị alpha cho bản ghi ARGB là ở byte đầu tiên.
- Bản ghi MATRIX (ma trận): biểu diễn một ma trận biến đổi tiêu chuẩn 2x3 thường được sử dụng trong đồ họa 2D để mô tả tỉ lệ, góc quay và sự biến đổi của một đối tượng đồ họa.
- Bản ghi biến đổi màu sắc: Bản ghi CXFORM định nghĩa một biến đổi đơn giản áp dụng với màu sắc của một đối tượng đồ họa. Có 2 kiểu biến đổi được sử dụng gồm Biến đổi theo phép nhân (Multiplication transforms) và Biến đổi theo phép cộng (Addition transforms). Bản ghi CXFORMWITHALPHA mở rộng chức năng của CXFORM bằng cách cho phép biến đổi màu sắc áp dụng cho kênh alpha cũng như cho các kênh màu đỏ, màu xanh lá cây và màu xanh da trời.
Cấu trúc tập tin SWF
.jpg)
Hình 1: Cấu trúc tập tin SWF
Một tập tin SWF bao gồm các thành phần sau: Tiêu đề (header), các khối dữ liệu được gắn thẻ (như hình 1).
Tiêu đề
Tất cả các tập tin SWF đều bắt đầu với một tiêu đề (header). Phần tiêu đề bao gồm các thành phần sau:
- Ký hiệu (Signature) dài 3 byte nhận 1 trong 3 giá trị sau:
+ FWS chỉ ra một tập tin SWF không nén
+ CWS chỉ ra toàn bộ tập tin sau 8 byte đầu tiên được nén sử dụng tiêu chuẩn mở ZLIB.
+ ZWS chỉ ra toàn bộ tập tin sau 8 byte đầu tiên được nén sử dụng tiêu chuẩn mở LZMA.
- Phiên bản (version): nằm ngay sau ký hiệu, có độ dài 1 byte và không phải là ký tự ASCII.
- Độ dài tập tin (FileLength): chỉ ra độ dài của một tập tin SWF bao gồm cả phần tiêu đề. Nếu là một tập tin SWF không nén thì FileLength bằng với kích thước tập tin. Nếu là một tập tin SWF nén thì FileLength bằng độ dài của tập tin sau khi dài nén.
- Kích thước khung (FrameSize): xác định chiều rộng và chiều cao của hình hiển thị trên màn hình, được lưu trữ trong một cấu trúc RECT (hình chữ nhật), kích thước của nó có thể thay đổi tùy theo số bít cần mã hóa tọa độ.
- Tốc độ khung (FrameRate): là tốc độ phát khung trong một giây. Tốc độ này không được đảm bảo nếu Flash Player chạy trên một CPU đang xử lý nhiều công việc.
- Bộ đếm khung (FrameCount): là tổng số khung trong tập tin SWF.
Các thẻ
Tiếp theo phần tiêu đề là các khối dữ liệu được gắn thẻ. Tất cả các thẻ chia sẻ một định dạng chung, do đó, bất kỳ ứng dụng phân tích tập tin SWF nào cũng có thể bỏ qua các khối này nếu nó không thể đọc chúng. Dữ liệu bên trong các khối có thể trỏ đến các offset trong khối dữ liệu đó nhưng không bao giờ trỏ đến offset của khối dữ liệu khác. Khả năng này cho phép các thẻ có thể được gỡ bỏ, chèn thêm hoặc chỉnh sửa bằng các công cụ xử lý tập tin SWF. Thẻ các thuộc tính của tập tin chỉ được yêu cầu đối với SWF phiên bản 8 trở lên.
Mỗi thẻ bắt đầu bằng kiểu thẻ (type) và độ dài thẻ (length). Định dạng tiêu đề của thẻ có thể ngắn hoặc dài. Với các tiêu đề thẻ ngắn được sử dụng cho các thẻ có độ dài dữ liệu 62 byte hoặc nhỏ hơn. Các tiêu đề thẻ dài, với trường độ dài có dấu 32 bít, có thể được sử dụng cho kích thước thẻ bất kỳ lên đến 2GB, lớn hơn nhiều so với thực tế.
Có 2 loại thẻ trong một tập tin SWF bao gồm:
- Thẻ định nghĩa (definition tag) xác định nội dung của tập tin SWF như hình dạng, văn bản, âm thanh,…Mỗi thẻ này có một định danh (ID) duy nhất cho nội dung mà nó định nghĩa.
- Thẻ quản lý (control tag) tạo, thao tác các biểu diễn của các ký tự trong từ điển và quản lý luồng tập tin. Trong đó, từ điển là một kho lưu trữ các ký tự được định nghĩa và có giá trị sử dụng đối với các thẻ quản lý.
Các thẻ trong tập tin SWF có thể xuất hiện bất kỳ, tuy nhiên, cần phải tuân theo các quy tắc sau:
- Thẻ FileAttributes phải là thẻ đầu tiên trong tập tin SWF.
- Một thẻ chỉ nên phụ thuộc vào thẻ trước nó, không nên phụ thuộc vào thẻ đằng sau.
- Thẻ định nghĩa có một ký tự phải xuất hiện trước thẻ quản lý tham chiếu đến ký tự đó.
- Thẻ âm thanh theo luồng phải có thứ tự
- Thẻ kết thúc luôn là thẻ cuối cùng trong tập tin SWF.
Ứng dụng
Các tập tin SWF được sử dụng phổ biến để cung cấp các hình ảnh động, phim, âm thanh trên web. Chúng cũng là phương tiện phổ biến để cung cấp các trò chơi trên trình duyệt (brower-based games).
Trong Thông tư số 22/2013/TT-BTTTT ngày 23/12/2013 của Bộ trưởng Bộ Thông tin và Truyền thông Công bố Danh mục tiêu chuẩn kỹ thuật về ứng dụng công nghệ thông tin trong cơ quan nhà nước quy định Khuyến nghị áp dụng (.swf) và được xếp vào nhóm Tiêu chuẩn về truy cập thông tin (hoạt họa).
Tài liệu tham khảo
[1] SWF File Format Specification, Version 19, Adobe, 2012.
[2] Thông tư số 22/2013/TT-BTTTT ngày 23/12/2013 của Bộ trưởng Bộ Thông tin và Truyền thông.
Đặng Thị Thu Hương