targetNamespace="urn:dvb:mis:dsmcc:2009" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xs:complexType name="DsmccType">
<xs:sequence>
<xs:element name="dsmcc_object" type="dsmcc:DsmccObjectType" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="dsmcc" type="dsmcc:DsmccType"/>
<xs:complexType name="DsmccObjectType">
<xs:sequence>
<xs:element name="stream_event" type="dsmcc:StreamEventType" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="component_tag" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="StreamEventType">
<xs:attribute name="stream_event_id" type="xs:string" use="required"/>
<xs:attribute name="stream_event_name" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
4.5.2 Kích hoạt sự kiện
Khi phía phát muốn gửi bất kỳ báo hiệu nào đến người dùng, thông tin kích hoạt sự kiện sẽ được chèn vào dòng truyền MPEG2. Dòng thông tin đặc biệt này chính là dòng thành phần được định nghĩa tham chiếu trong đối tượng
StreamEventMessage ở trên. Thông tin kích hoạt sự kiện cho biết sự kiện nào đang được kích hoạt thông qua mã nhận diện sự kiện và dữ liệu kèm theo nếu có. Thông tin được truyền theo cấu trúc section, như sau:
Bảng 4.13: Cấu trúc DSMCC_section [9]
Số bit | Giải thích | |
DSMCC_section() { | ||
table_id | 8 | 0x3D, cấu trúc mang thông tin mô tả dòng (Stream Descriptors) |
section_syntax_indicator | 1 | 1 |
private_indicator | 1 | 0 |
reserved | 2 | |
dsmcc_section_length | 12 | Chiều dài phần phía sau (byte) |
table_id_extension | 16 | Mã sự kiện được kích hoạt (event_id) |
reserved | 2 | |
version_number | 5 | Báo kích hoạt sự kiện cho đầu thu thông qua cập nhật phiên bản |
current_next_indicator | 1 | 1 |
section_number | 8 | |
last_section_number | 8 | |
StreamEventDescriptor() { | 8 | |
descriptorTag | 8 | 0x1A: Stream Event descriptor |
descriptorLength | 8 | |
eventId | 16 | Mã nhận diện sự kiện |
reserved | 31 | |
eventNPT | 33 | bỏ qua (=0) |
privateDataByte() } | dữ liệu kèm theo sự kiện, đầu thu không phân tích dữ liệu này, ứng dụng sẽ thực hiện khi cần. | |
CRC_32 | 32 | |
} |
Có thể bạn quan tâm!
- Mô Hình Tiêu Chuẩn Hbbtv Phiên Bản 1.5
- Vòng Đời Của Một Ứng Dụng Liên Quan Tới Quảng Bá
- Cấu Trúc Thông Tin Bổ Sung Của Transport_Protocol_Label (Truyền Qua Oc)[8]
- Nghiên cứu mô hình truyền hình lai ghép HbbTV và xây dựng ứng dụng minh họa - 10
- Nghiên cứu mô hình truyền hình lai ghép HbbTV và xây dựng ứng dụng minh họa - 11
Xem toàn bộ 89 trang tài liệu này.
Việc tách riêng định nghĩa sự kiện với dòng báo hiệu sự kiện giúp dễ dàng sử dụng lại các sự kiện được định nghĩa. Các dòng báo hiệu sự kiện có thể mang những sự kiện có cùng eventId, thậm chí các sự kiện trong đó được báo hiệu tại những thời điểm khác nhau kèm theo dữ liệu khác nhau. Điều này cho phép một
ứng dụng sử dụng một eventId cho nhiều sự kiện có đặc tính giống nhau. Chẳng hạn trong một trận đấu, có thể sử dụng một eventId để báo hiệu mỗi khi bàn thắng được ghi, một eventId khác báo hiệu đá phạt trực tiếp, và một eventId khác nữa báo kết thúc trận đấu. Như vậy trong thời gian trận đấu diễn ra, ứng dụng chỉ cần quan tâm đến 3 nhóm sự kiện này. Trong một số trường hợp, báo hiệu sự kiện không có dữ liệu kèm theo.
Khai báo dòng sự kiện
Cũng như mọi dòng thành phần khác, để đầu thu có thể nhận diện, dòng thành phần mang thông tin kích hoạt sự kiện phải được khai báo trong PMT của kênh xác định. Thông tin khai báo theo cấu trúc sau:
Bảng 4.14: Cấu trúc khai báo loại dòng thành phần [10]
Số bit | Diễn giải | |
stream_type | 8 | 0xC, cho biết đây là dòng mang stream descriptors (ISO/IEC 13818-6) |
resevered | 3 | |
elementary_PID | 13 | Mã nhận diện gói của dòng |
resevered | 4 | |
es_info_len | 12 | chiều dài thông tin bên dưới (byte) |
descriptors | ||
stream_identifier_descriptor | ||
tag | 8 | 0x52 (stream_identifier_descriptor) |
length | 8 | 1 (byte cho field component_tag) |
component_tag | 8 | Gán nhãn nhận diện dòng để tham chiếu (tag) trong đối tượng StreamEventMessage trong OC |
4.5.3 Sự kiện ‘do-it-now’
Việc cập nhật thông tin trong AIT bằng cách chèn thêm ứng dụng và gán mã kiểm soát AUTOSTART được xem là cách đồng bộ đơn giản không cần thông tin đồng bộ. Cách này thường được dùng cho những ứng dụng tự động kích hoạt vào thời điểm nào đó khi chương trình diễn ra như quảng cáo tương tác, hiển thị thông tin thêm cho chương trình… Một số ứng dụng cần đồng bộ nhiều lần và có kèm
theo dữ liệu cho mỗi sự kiện như gameshow chẳng hạn, nhất thiết phải kết hợp với dòng thông tin đồng bộ.
“Do-it-now” là dạng sự kiện mà đầu thu sẽ báo cho ứng dụng ngay khi nhận được từ dòng truyền. Đây là sự kiện độc lập, việc đồng bộ không dựa vào thông tin thời gian hệ thống. Sự kiện “do-it-now‟ có event_id được quy định trong vùng giá trị từ 0x0001 đến 0x3FFF. Đầu thu cần phải xử lý đặc biệt để đảm bảo khả năng nhận được sự kiện với độ tin cậy cao nhất.
Với mỗi ứng dụng, không yêu cầu đầu thu phải theo dõi nhiều dòng con mang sự kiện “do-it-now”. Vì vậy, nếu nhiều sự kiện được định nghĩa tham chiếu đến dòng con khác nhau thì chỉ có một dòng con được dùng để nhận sự kiện. Phía phát phải truyền tất cả sự kiện cho một ứng dụng trong các gói có cùng PID.
Đầu thu dành riêng một bộ lọc section để theo dõi sự kiện trong dòng truyền nếu có ứng dụng đăng ký nhận sự kiện này. Bộ lọc nhận diện đúng sự kiện cần nhận dựa vào giá trị event_id (trường table_id_extension) trong section.
Mỗi khi nhận được sự kiện, đầu thu kiểm tra xem sự kiện có event_id nhận được có được định nghĩa trong OC không. Nếu có, sẽ tiếp tục kiểm tra event_id để chắc chắn là sự kiện “do-it-now” và kích hoạt ngay. Section sự kiện được truyền lặp lại nhiều lần trong khoảng thời gian nhất định với ba thông số chính table_id, event_id, version_number. Đầu thu tiến hành xử lý sự kiện ngay lần đầu tiên nhận được. Chuỗi section kế tiếp sẽ bị bỏ qua cho đến khi event_id hay version_number mới được phát hiện.
Thực ra, chuẩn MHP trước đây cũng như trong một số tài liệu của DVB có định nghĩa vài loại sự kiện khác, không được kích hoạt ngay mà chỉ được kích hoạt sau một khoảng thời gian định trước. Kiểu đồng bộ này dựa trên dòng thông tin thời gian bổ sung như dòng NPT (Normal Play Time, dựa trên thông tin PCR của chương trình) hay dòng DVB Timeline.
HbbTV chỉ hỗ trợ duy nhất loại sự kiện „do-it-now‟. Đây là loại sự kiện được sử dụng phổ biến. Trước hết do tính linh hoạt, có thể sử dụng „do-it-now‟ trong mọi trường hợp cần đồng bộ theo thời gian biểu. Kế đến là tính đơn giản vì đứng độc lập không dựa vào dòng thông tin thời gian bổ sung, giúp dễ dàng cho người viết ứng
dụng. Sau cùng là tính an toàn, bởi trong trường hợp đồng bộ dựa trên dòng thông tin thời gian NPT chẳng hạn, nếu giá trị PCR được phát sinh lại khi truyền qua một hệ thống khác, thời điểm đồng bộ sẽ không còn chính xác.
Điều cần lưu ý khi thực hiện đồng bộ là độ trễ khi thông tin báo hiệu được gửi tới ứng dụng. Độ trễ này tùy thuộc khả năng theo dõi và phân phối sự kiện của đầu thu. Rất khó để đồng bộ chính xác đến từng khung hình.
Qua báo cáo chương đã đưa ra quy tắc hoạt động và phương thức truyền tín hiệu của 2 dạng ứng dụng trong truyền hình lai ghép HbbTV, từ đó có cái nhìn tổng quan hơn về cơ chế hoạt động của truyền hình lai ghép HbbTV. Vậy để lập trình một ứng dụng trên nền tảng HbbTV cần những gì? Sử dụng ngôn ngữ nào? Quy tắc lập trình ra sao? Nó có khác gì so với ứng dụng web không? Trong chương tiếp theo của báo cáo sẽ trình bày rõ các vấn đề này.
CHƯƠNG 5: TÌM HIỂU MÔI TRƯỜNG TRIỂN KHAI VÀ XÂY DỰNG ỨNG DỤNG MINH HỌA HBBTV
Tóm tắt: Trong chương 5 của luận văn mục tiêu chính là nghiên cứu các ngôn ngữ, công cụ hỗ trợ và quy tắc lập trình một ứng dụng trên nền tảng HbbTV. Từ đó xây dựng ứng dụng HbbTV minh họa chủ đề về du lịch, ứng dụng trên môi trường giả lập, nhằm làm rõ hơn về quy tắc hoạt động của ứng dụng trên nền tảng HbbTV.
5.1 Môi trường triển khai ứng dụng HbbTV
5.1.1 Ngôn ngữ lập trình ứng dụng HbbTV
Phát triển ứng dụng web là một lĩnh vực rộng lớn với nhiều ngôn ngữ khác nhau cho cả phía client và server. Công cụ hỗ trợ phát triển web cũng phong phú không kém, từ viết code riêng lẻ đến những bộ công cụ tích hợp đầy đủ IDE (Intergrated Development Environment, môi trường phát triển tích hợp). Đặc biệt đối với ứng dụng HbbTV dùng ngôn ngữ kịch bản Javascript, rất nhiều công cụ miễn phí có thể chọn lựa như Notepad++, Eclipse, Netbeans, Aptana, Komodo Edit, PHP Designer,… Phần lớn công cụ này đều hỗ trợ các ngôn ngữ web phổ biến HTML, DOM, CSS, Javascipt, PHP. Tất cả các ngôn ngữ này đều được sử dụng khi viết ứng dụng thử nghiệm. Ngoài ra, việc thiết lập môi trường phát triển web cũng không quá phức tạp nhờ sự hỗ trợ của các bộ cài đặt nguồn mở có sẵn như WAMP, XAMPP, AppServ…
Trình duyệt là một công cụ khác cần phải có trong quá trình phát triển ứng dụng web. Hiện có rất nhiều trình duyệt phổ biến trong môi trường máy tính như IE, Firefox, Chrome, Opera, Safari,…Tuy nhiên tại thời điểm này chỉ có Firefox và Opera hỗ trợ HbbTV: FireHbbTV dạng công cụ cài thêm vào trình duyệt Firefox (plugin) ; Opera HbbTV Emulator dạng phần mềm chạy độc lập (cài đặt phức tạp, kích thước lớn). Tương tự như đối với thị trường đầu thu, việc hỗ trợ đầy đủ và hoàn thiện các tính năng chuẩn HbbTV trên 2 trình duyệt này vẫn còn rất hạn chế.
5.1.2 Ứng dụng HbbTV so với trang web thông thường Đối tượng oipfApplicationManager, oipfConfiguration
Về hình thức tổ chức dữ liệu, ứng dụng HbbTV bao gồm các trang không khác gì so với trang web thông thường. Mỗi trang được cấu thành từ nhiều thành phần khác nhau như tài liệu HTML, tài liệu định dạng trang CSS, mã kịch bản Javascipt, dữ liệu và hình ảnh/video kèm theo. Ngoài ra cũng cho phép truy xuất vào các thành phần trong trang thông qua cấu trúc DOM, kết hợp với XMLHttpRequest cho phép thay đổi từng thành phần riêng theo kỹ thuật AJAX mà không phải tải lại toàn bộ trang.
Nếu như trang web thông thường được nạp bởi trình duyệt, thì ứng dụng HbbTV được nạp và thực thi bởi đối tượng đặc biệt oipfApplicationManager. Đối tượng này cung cấp các phương thức truy cập vào lớp Application do nó quản lý để tạo mới, thao tác hay xóa một ứng dụng nào đó (cũng có thể là chính nó).
Các trang web truyền thống đứng độc lập nhau, không có khái niệm gom nhóm hay ngữ cảnh để nạp và thực thi các trang trong cùng một nhóm. Ứng dụng HbbTV cung cấp một ngữ cảnh chung gồm các thông tin về trạng thái, phân quyền và độ ưu tiên của ứng dụng. Các thông tin này được chia sẻ giữa tất cả các trang trong ứng dụng và nó có giá trị trong suốt thời gian ứng dụng tồn tại.
OITF có thể hỗ trợ thực thi nhiều ứng dụng đồng thời. Giữa những ứng dụng có thể chia sẻ tài nguyên màn hình chung theo cách thức xác định và được kiểm soát. Điều này hoàn toàn khác đối với một trình duyệt thông thường khi mở nhiều trang trong nhiều cửa sổ, hay nhiều tab trong một cửa sổ trình duyệt.
Bắt đầu phần <body> mỗi trang, cần phải khai báo 2 đối tượng sau để theo dõi vòng đời và truy cập cấu hình ứng dụng:
<body>
<div style="visibility: hidden; display: none;">
<object type="application/oipfApplicationManager" id="applicationManager" >
</object>
<object type="application/oipfConfiguration" id="configuration" >
</object>
</div>
</body>
Kết hợp nội dung quảng bá
Nhiệm vụ quan trọng nhất của truyền hình là hiển thị hình ảnh của chương trình. Trong một số trường hợp, nhu cầu này cần được đáp ứng khi người dùng truy cập vào nội dung khác trên internet, để họ có thể liên tục theo dõi nội dung đang phát sóng. Đa số ứng dụng HbbTV sẽ dành một phần giao diện để hiển thị video quảng bá. Trang HTML thông thường được kết hợp nội dung quảng bá bằng cách nhúng thêm đối tượng video/broadcast. Thông qua đối tượng này có thể thu nhỏ kích thước gốc của nội dung quảng bá (1280x720). Khoảng thu nhỏ được phép theo chuẩn là từ 1/4 đến 1/8. Nếu đầu thu không hỗ trợ trong khoảng này, phần biên của hình ảnh sẽ bị xét bớt. Đối tượng video/broadcast được kết vào kênh đang xem thông qua thủ tục hàm bindToCurrentChannel() trong đối tượng. Mỗi khi người dùng chuyển kênh, đối tượng video/broadcast tự động gọi thủ tục hàm tương ứng để hiển thị đúng kênh người dùng muốn chuyển tới.
Sử dụng remote
Trong phiên bản HbbTV hiện tại, người dùng tương tác với ứng dụng chủ yếu bằng remote, không dùng chuột như trang web thông thường. Vì thế giao diện cũng phải được thiết kế theo cách riêng, đảm bảo dễ dàng thao tác cho người dùng. Việc này đòi hỏi phải xử lý code nhiều hơn khi xây dựng ứng dụng.
Mã phím trên bàn phím máy tính không được sử dụng trong ứng dụng HbbTV. Các mã phím mới được định nghĩa. Mỗi phím trên remote được thiết kế cho từng tính năng xác định. Ứng dụng có thể dùng các phím này cho tính năng xử lý riêng, nhưng phải đăng ký nhận sự kiện phím cho các phím tương ứng trước khi sử dụng. Mỗi khi bấm phím, sự kiện phím được gửi tới hàm xử lý xác định trong ứng dụng để thực thi các đoạn mã thích hợp. Sau khi ứng dụng kết thúc, tài nguyên phím được giải phóng và các sự kiện phím trở về xử lý theo mặc định.
Đăng ký phím theo cú pháp:
<application>.privateData.keyset.setValue(mask)
Trong đó:
application: đối tượng ứng dụng (hiện tại) đang cần đăng ký phím;