Đề tài Xây dựng hệ thống chương trình quản lý phòng máy

Broadcast một dòng bằng cách cho phép những máy khách (Windows Media Server, Web Server, hay player) đểkết nối trực tiếp với máy chạy ứng dụng Windows Media Encoder đểkéo dòng về. Máy khách kết nối với dòng bằng cách dùng Internet hay . Đểbroadcast một dòng từmáy chủ, dùng IWMEncBroadcast đểxác định nghi thức và sốhiệu cổng đểcó thểbroadcast.

pdf233 trang | Chia sẻ: haianh_nguyen | Lượt xem: 1382 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng hệ thống chương trình quản lý phòng máy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
điểm cuối tương ứng. Khả năng truyền miêu tả khả năng của terminal để truyền dòng truyền thông. Khả năng nhận miêu tả khả năng của terminal để nhận và xử lý các dòng truyền thông đến. 4.2.6.6 Tín hiệu kênh luận lý: Một kênh logic mang thông tin từ một điểm cuối đến một điểm cuối khác (trong trường hợp hội thảo điểm-nối-điểm) hay nhiều điểm cuối (trong trường hợp hội 183 thảo điểm-nối-nhiều điểm). H.245 cung cấp các thông điệp để mở hay đóng một kênh logic; một kênh giao tiếp chỉ có một hướng. 4.2.7 Tín hiệu gọi H.225 và tín hiệu điều khiển H.245: Ví dụ mạng đơn giản chứa hai thiết bị đầu cuối H.323( T1 và T2)kết nối với gatekeeper. Giả sử dùng tín hiệu gọi trực tiếp. Cũng giả sử rằng dòng truyền sử dụng kiểu đóng gói RTP. Hình dưới mô tả cách thức thiết lập cuộc gọi H.323 Hình 4-5 Thiết lập cuộc gọi H323 1. T1 gởi thông điệp RAS ARQ trên kênh RAS đến gatekeeper để đăng ký. T1 đòi hỏi sử dụng tín hiệu gọi trực tiếp. 2. Gatekeeper các nhận lại quyền của T1 bằng cách gởi ACF đến T1. Gatekeeper chỉ đỉnh trong ACF là T1 có thể sử dụng tín hiệu gọi trực tiếp. 184 3. T1 gởi thông điệp thiết lập tín hiệu gọi H.225 đến T2 yêu cầu kết nối. 4. T2 hồi đáp lại với một thông điệp xử lý cuộc gọi H.225 đến T1 5. Bây giờ T2 phải đăng ký với gatekeeper. Nó gởi thông điệp RAS ARQ đến gatekeeper trên kênh RAS. 6. Gatekeeper xác nhận đăng ký bằng cách gởi thông điệp RAS ARQ đến T2 7. T2 thông báo cho T2 về việc thiết lập kết nối bằng cách hởi thông điệp cảnh báo H.225 8. Sau đó T2 xác nhận lại việc thiết lập kết nối bằng cách gợi thông điệp kết nối đến T1, và cuộc gọi được thực hiện. Dòng tín hiệu điều khiển H.323 185 9. Kênh điều khiển H.225 được thiết lập giữa T1 và T2. T1 gởi một thông điệp H.245 TerminalCapbabilitySet đến T2 để trao đổi khả năng của nó. 10. T2 báo nhận những khả năng của T1 bằng cách gởi thông điệp H.245 Terminal CapabilitySetAck 11. T2 trao đổi khả năng của nó với T1 bằng cách gởi thông điệp H.245 TerminalCapabititySet 12. T1 báo nhận những khả năng của T2 bằng cách gởi thông điệp H.245 Terminal CapabilitySetAck 13. T1 mở kênh truyền với T2 bằng cách gởi thông điệp H.245 openLogicalChannel. Địa chỉ vận chuyển của kêng RTCP được bao gồm trong thông điệp. 14. T2 báo nhận sự thiết lập kênh luận lý một chiều từ T1 đến T2 bằng cách gởi thông điệp H.245 openLogicalChannelAck. Bao gồm trong thông điệp báo nhận là địa chỉ vận chuyển của RTP cung cấp nởi T2 để cho T1 sử dụng cho việc gởi dòng truyền thông RTP và địa chỉ RTCP nhận từ T1 sớm hơn 15. Sau đó T2 mở kênh truyền với T1 bằng cách gởi thông điệp H.245 openLogicalChannel. Địa chỉ vận chuyển của kênh RTCP được bao gồm trong thông điệp 16. T2 báo nhận sự thiết lập của kênh luận lý một chiều từ T2 đến T1 bằng cách gởi thông điệp H.245 openLogicalChannelAck. Bao gồm trong thông điệp báo nhận là địa chỉ vận chuyển của RTP cung cấp bởi T1 để cho T2 sử dụng cho việc gởi dòng truyền thông RTP và địa chỉ RTCP nhận từ T2 sớm hơn. Bây giờ giao tiếp dòng hai chiều được thiết lập 186 Hình 4-6 H.323 Media Stream and Media Control Flows 17. T1 gởi dòng truyền thông đóng gói theo RTP đến T2 18. T2 gởi dòng truyền thông đóng gói theo RTP đến T1 19. T1 gởi thông điệp RTCP đến T2 20. T2 gởi thông điệp RTCP đến T1 187 Hình 4-7 Giải phóng cuộc gọi 21. T2 bắt đầu giải phóng cuộc gọi. Nó gởi thông điệp kết thúc phiên làm việc đến T1. 22. T1 giải phóng điểm cuối ở cuộc gọi và xác nhận sự giải phóng bằng cách gởi thông điệp kết thúc phiên làm việc đến T2. 23. T2 hoàn thành việc giải phóng cuộc gọi bằng cách gởi thông điệp giải phóng hoàn toàn H.225 đến T1 24. T1 và T2 thoát ra khỏi gatekeeper bằng cách gởi thông điệp RAS DRQ đến gatekeeper 25. Gatekeeper cũng thoát ra khỏi T1 và T2 và xác nhận bằng cách gởi thông điệp DCF đến T1 và T2 188 4.2.8 Nghiên cứu thư viện Objective Open H.323 for C 4.2.8.1 Kiến trúc : Objective Open H.323 for C được xem là một ứng dụng đơn giản, một tiến trình. Nó cho phép một điểm cuối H.323 đơn lẻ được thiết lập kết nối thông qua kêng truyền và tín hiệu H.323. Trộn tín hiệu vào ra được thực hiện bằng lệnh Select hay Poll của Unix để theo dõi tất cả các kênh vào ra đang hoạt động. Giao tiếp TCP/IP và UDP được hỗ trợ. Chương trình ứng dụng với ngăn xếp được thực hiện thông qua các hàm quay lui. Ngăn xếp được thiết kế theo hướng sự kiện và sẽ hồi đáp lại dòng vào ra hay theo sự kiện thời gian bởi các hàm quay lui đã đăng ký được gọi lại. Những hàm quay lui được định nghĩa bởi nhiều loại thông điệp Q.931/H.225 khác nhau. Thôngđiệp Q.931/H.225 Hàm quay lui Mô tả Setup onIncomingCall Xảy ra khi thông điệp setup được nhận, hay nếu RAS được bật lên, khi gatekeeper chấp nhận yêu cầu thiết lập cuộc gọi Setup onOutcomingCall Hàm quay lui này được gọi thông sau khi thông điệp thiết lập Q.931 được gởi Alert onAlerting Xảy ra khi thông điệp cảnh giác Q.931 được nhận Connect onCallEstablished Xảy ra khi thông điệp kết nối Q.931 được nhận. Nó không xảy ra cho tới sau khi thông đệp tạo đường đi H.245 trong thông điệp kết nối được xử lý Facility Xử lý bên trong. Thông 189 điệp H.245 tạo đường ống hay yêu cầu bắt đầu H.245 được xử lý ReleaseComplete onCallClear Xảy ra khi thông điệp giải phóng hoàng toàn Q.931 được nhận Information Notify Progress Status Status Enquiry SetupAck Không có hành động nào được thực hiện trên các thông điệp này Chương trình ứng dụng H.323 sử dụng giao tiếp đồng đẳng cho việc trao đổi dữ liệu. Điều này có nghĩa là bất cứ ứng dụng nào cũng đóng hai vai trò vừa là client, vừa là server. Đây là ứng dụng gọi điện đơn giản dựa trên H.323 mô tả khả năng thiết lập cuộc gọi, thương lưởng về khả năng và bắt đầu kênh truyền âm thanh. 4.2.8.2 Mẫu thiết kế ứng dụng H.323 đơn giản: 4.2.8.2.1 Khởi tạo điểm cuối: Trước khi ngăn xếp ooh323c có thể làm mọi việc, cấu trúc điểm cuối phải được khởi tạo. Nó được thu65c hiện bằng cách gọi các hàm sau: ooH323EpInitialize(args…) Tham số bao gồm thông tin về định danh người gọi, loại cuộc gọi được thực hiện( âm thanh, hình ảnh, hay fax) và tên tập tin lưu vết đường đi, chỗ mà thông tin bản ghi được lưu trữ. Những thuộc tính khác có thể được thiết lập thông qua một loạt các cuộc gọi hàm ooH323EpSet. Những thuộc tính được thiết lập này trong đối tượng điểm cuối toàn cục. Ví dụ: 190 ooH323EpSetAliasH323ID : có thể được sử dụng để thiết lập định danh trong địa chỉ bí danh. Việc sử dụng dịch vụ client gatekeeper RAS – “Registration, Admission, and Status” nên được khởi tạo thông qua việc gọi hàm sau : ooGkClientInit(eGkMode, szGkAddr, iGkPort) Đối với những cuộc gọi điểm nối điểm đơn giản, thông số chế độ gatekeeper nên được thiết lập là RasNoGatekeeper và tất cả các thông số nên được thiết lập là 0. Các chế độ Gatekeeper khác là RasDiscoverGatekeeper( khám phá một gatekeeper) hay là RasUseSpecificGatekeeper( sử dụng gatekeeper xác định). Các thông số khác được sử dụng để thiết lập địa chỉ Ip và số Port 4.2.8.2.2 Thêm vào khả năng: Một ứng dụng H.323 phải xác định cho máy khách của nó biết nó có khả năng làm cái gì. Thương lượng về khả năng sẽ được diễn ra bên trong việc xử ý thông điệp H.245 để đạt đến sự đồng ý lẫn nhau dựa trên tập các khả năng. Những khả năng được xác định dựa trên một loạt các hàm sau đây: ooAddCapability(capability, type, callbacks); giá trị tham số capabitity được định nghĩa trong ooCapability.h. Đây là những hằng số định nghĩa lọai khả năng đã biết. Người sử dụng có thể ở rộng danh sách này nếu muốn chương trình hỗ trợ những khả năng không có trong danh sách. Tham số type xác định lọai khả năng được định nghĩa trong MULTIMEDIA_SYSTEM_CONTROL.h Có nhiều loại hàm quay lui khác nhau được thực hiện khi kênh luận lý được mở hay đóng. Những hàm quay lui được xác định ở đây: startReceiveChannel startTransmitChannel stopReceiveChannel 191 stopTransmitChannel 4.2.8.2.3 Định nghĩa hàm quay lui: Khi các điểm cuối được thiết lập, người dùng đăng ký các hàm quay lui mà họ định nghĩa. Hàm quay lui được định nghĩa ở cả mức độ H.245 khi kênh luận lý được mở hay đóng hay ở mức độ Q.931/H.225 khi những thông điệp tín hiệu được trao đổi. Ngăn xếp sẽ thực thi những hàm này khi sự kiện gắn với hàm quay lui đó xảy ra. Các hàm quay lui Q.931/H.225 được đăng ký bằng cách gọi những hàm sau: ooH323EpRegisterCallbacks Ít nhất thì người dùng phải thực thi những hàm quay lui khả năng để bắt đầu và kết thúc dòng truyền cho ứng dụng đặc biết của họ. Bắt đầu hay kết thúc dòng truyền không được hỗ trợ trong ooH323c 4.2.8.2.4 Tạo H.323 Listener: Một H.323 Listener được tạo để chấp nhận các yêu cầu kết nối vào. Tất cả mọi thứ để bắt đầu listener là gọi hàm sau: ooCreateH.323Listener(); 4.2.8.2.5 Khởi tạo cuộc gọi: Dùng để mở kênh truyền cho bất cứ loại giao tiếp truyền thông nào – không chỉ là âm thanh. Một cuộc gọi được khởi tạo để gởi hình ảnh hay dữ liệu. Hàm ooMakeCall (dest, callToken, bufsiz) được sử dụng cho mục đích này. 4.2.8.2.6 Đóng một cuộc gọi: Mỗi bên kết nối đều có thể đóng cuộc gọi. Gọi hàm : ooHangCall(callToken) 4.2.8.2.7 Đóng ngăn xếp: 192 Gọi hàm ooStopMonitor để đóng ngăn xếp. Nó sẽ gọi làm hàm ooMonitorChannel thoát. Khi điều này xảy ra, người dùng sẽ gọi hàm ooH323Destroy ở cuối chương trình dọn dẹp điểm cuối 4.3 Windows Media Encoder 4.3.1 Windows Media Encoder: Windows Media Encoder SDK (Software Developement Kit) là một trong những thành phần chính của Microsoft Windows Media 9 Series. Những phần khác gồm: • Microsoft Windows Media Services 9 Series SDK • Microsoft Windows Media Format 9 Series SDK • Microsoft Windows Media Rights Manager 9 Series SDK • Microsoft Windows Media Player 9 Series SDK • Windows Media 9 Series Embedded Product Adaptation Kit (PAK) Windows Media Encoder SDK được thiết kế cho những ai muốn phát triển một ứng dụng Windows Media Encoder bằng cách dùng các hàm API (application proramming interface – giao diện lập trình ứng dụng) tự động hóa cao. Với SDK này, một lập trình viên dùng C++, Microsoft Visual Basic, hay một ngôn ngữ dạng kịch bản có thể bắt các nội dung đa truyền thông và mã hóa và các tập tin hay dòng (stream) dạng Windows Media. Chẳng hạn, bạn có thể dùng API tự động hóa này để : o Broadcast content trực tuyến: một tổ chức truyền tin có thể dùng API tự động hóa để lên lịch chụp tự động và broadcast nội dung. Các ngành vận chuyển địa phương có thể dẫn dòng các ảnh động của điều kiện đường ở những điểm gây nguy hiểm, cảnh báo tài xế về tình trạng kẹt xe và khuyến cáo dùng những con đường khác. 193 o Batch-process nội dung : một tổ chức sản xuất truyền thông phải xử lý một số lượng lớn các tập tin, có thể cần tạo tiến trình chạy nền dùng API tự động hóa để bắt mã hóa dòng lặp đi lặp lại, cái này sau cái khác. Một tập đoàn có thể dùng API tự động hóa để xử lý các dịch vụ truyền thông theo dòng với ngôn ngữ kịch bản hay dùng và Windows Script Host. Windows Script Host là máy chủ độc lập ngôn ngữ có thể dùng để chạy bất kỳ các engine kịch bản trên Windows 95 hay sau đó, Windows NT, hay Windows 2000. o Tạo giao diện người dùng tùy biến : một nhà cung cấp dịch vụ Internet có thể xây dựng một giao diện dùng chức năng của API tự động hóa để chụp, mã hóa, và broadcast dòng truyền thông. Thay vào đó, ta có thể dùng các giao diện định nghĩa trước dành cho người dùng trong API tự động hóa với cùng mục đích. o Quản trị từ xa các ứng dụng Windows Media Encoder: ta có thể dùng API tự động hóa để chạy, sửa lỗi và quản trị các ứng dụng Windows Media Encoder từ máy ở xa. Tài liệu này cung cấp cái nhìn tổng quan về các đề tài mã hóa chung, hướng dẫn lập trình, và các tham chiếu đầy đủ về các giao diện, đối tượng, kiểu liệt kê, cấu trúc và hằng, đi kèm là các ví dụ. 4.3.1.1 Tìm hiểu Windows Media Encoder SDK : Windows Media Encoder SDK mạnh mẽ và đáng tin cậy, cung cấp một tập phong phú về giao diện cho phép các lập trình viên tích hợp Windows Media vào trong các ứng dụng và dòng công việc. Windows Media Encoder SDK hỗ trợ nhiều ngôn ngữ lập trình gồm C++, Visual Basic, Visual Basic Scripting Edition (VBScript), Visual Basic cho ứng dụng, và tất cả các ngôn ngữ lập trình thuộc bộ Microsoft .NET. Nhiều ứng dụng khác nhau có thể phát triển dùng Windows Media Encoder SDK, chẳng hạn video e-mail, các thu thập giám sát bảo mật, bộ mã hóa dạng nền, công cụ chụp màn hình, các add-ins Microsoft PowerPoint® and Microsoft Office, các bộ thâu số, các 194 ứng dụng mã hóa tùy biến. Chẳng hạn, phần mềm Windows Media Encoder phát triển dựa trên Windows Media Encoder SDK. Windows Media Encoder SDK cung cấp một tập các tính năng rộng lớn, cho phép người dùng thực hiện: o Mã hóa nhiều định dạng tập tin khác nhau. o Xem dữ liệu đầu vào và đầu ra của nội dung trong khi xử lý mã hóa. o Mã hóa nội dung theo dòng hay theo tập tin. Các dòng có thể kéo từ các ứng dụng mã hóa hay đẩy lên một server Windows Media. o Điều khiển các thiết bị số dùng chính các ứng dụng mã hóa. o Nhận các số liệu thống kê trong quá trình hay sau quá trình mã hóa. o Tạo và hiệu chỉnh các profile mã hóa tùy biến. o Chỉnh sửa các dòng bằng cách tạo nhiều tập tin từ một tập tin multiple bit rate (MBR) đơn, hay bằng cách tạo một tập tin MBR từ nhiều tập tin. o Chỉnh sửa tập tin Windows Media bằng cách cắt bớt các khỏang bắt đầu và kết thúc, hay bằng các thêm các dữ liệu meta, kịch bản, đánh dấu, và chỉ mục. o Bảo vệ nội dung trong suốt quá trình mã hóa dùng công nghệ quản lý chữ ký số (digital rights management DRM). Windows Media Encoder SDK xây dựng trên Windows Media Format SDK, cung cấp các chức năng cấp thấp. Không như Windows Media Format SDK, Windows Media Encoder SDK hỗ trợ các ngôn ngữ kịch bản và cho phép xây dựng các ứng dụng phức tạp với rất ít mã thêm vào. Hơn nữa, Windows Media Encoder SDK hỗ trợ nhiều nguồn dữ liệu và tùy chọn xuất mà không cần người lập trình tự viết các thành phần cấp thấp này. 4.3.1.2 Tìm hiểu Windows Media Format : Windows Media Format là một định dạng thuộc chủ quyền cho dẫn dòng âm thanh, hình ảnh và văn bản từ server Internet đến máy khách. Một tập tin Windows 195 Media có thể lưu trữ và trình diễn cục bộ. Mỗi tập tin Windows Media chứa một hay nhiều dòng truyền thông để tạo nên một trình diễn đa truyền thông. Phân phối dòng đồng bộ với dòng thời gian. Các danh sách sau giới thiệu các tính năng chính của Windows Media Format: o Một tập tin Windows Media Encoder có thể truyền bằng bất kỳ nghi thức vận chuyển liên lạc dữ liệu bên dưới. Windows Media Format không chỉ rõ định dạng về các gói tin dữ liệu cho các nghi thức mạng khác nhau. o Windows Media Format linh động về băng thông. Một dòng đầu vào đơn có thể mã hóa thành nhiều dòng đầu ra trong một tập tin Windows Media. Mỗi dòng tùy biến lại như thế khác nhau ở chỗ tần số bit mà nó có thể dựng hình, và chỉ một tại một thời điểm. Server Windows Media dùng phân dùng thông minh để gởi dòng chất lượng cao đến một máy khách phù hợp. o Phân phối và trình diễn nhiều dòng dữ liệu truyền thông đồng bộ với dòng thời gian chung. Dữ liệu truyền thông trong một tập tin Windows Media đóng tem thời gian. o Một tập tin Windows Media có thể chứa một dòng hình ảnh, một dòng âm thanh, một dòng Web, và một dòng kịch bản. o Máy khách không cần lưu trữ nôi dung dựa trên Windows Media để trình diễn dòng đa truyền thông. o Windows Media Format xây dựng các điều khiển cấp thấp các thao tác đọc và viết. 4.3.1.3 So sánh WME SDK và WMF SDK: Functionality Windows Media Encoder SDK Windows Media Format SDK Tự động hóa ứng dụng. Có Không 196 Tự động đọc nội dung truyền thông nén và thô, và nén ghi như nội dung dựa trên Windows Media. Có Không Có thể chuyển các dòng âm thanh hình ảnh sang định dạng Windows Media. Có Không Cung cấp giao diện người dùng Windows Media Encoder tùy chọn. Có Không Cài đặt Profile Manager. Có Không Có thể điều khiển từ xa các ứng dụng Windows Media Encoder. Có Không Nén dữ liệu đa truyền thông. Có Có Chỉnh sửa thông tin header của tập tin Windows Media. Có Có Ghi các số liệu thống kê mã hóa. Có Có Giải nén dữ liệu đa truyền thông để chơi lại. Không Có Lập trình tạo một profile. Có Có Điều khiển thiết bị số bằng lập trình. Có Không Tích hợp thẳng với các dịch vụ tạo nội dung DRM. Có Không Hỗ trợ ngôn ngữ lập trình. C, C++, C#, C, C++ 197 Microsoft Visual Basic, Visual Basic Scripting Edition, Microsoft JScript®, Microsoft Windows Script Host Bảng 4-2 So sánh Windows Media Encoder SDK và Windows Media Format 4.3.2 Hệ thống cấp bậc các đối tượng mã hóa: Windows Media Encoder SDK được xây dựng trên nền Windows Media Format, một API cấp thấp chứa các giao diện cần cho: o Ghi các tập tin Windows Media từ các dữ liệu âm thanh, hình ảnh, và kịch bản chưa nén. o Đọc và giải nén các tập tin Windows Media. o Chỉnh sửa thông tin header tập tin Windows Media. Windows Media Encoder SDK bao gồm một số đối tượng có thể tạo thể hiện độc lập bằng cách dùng class ID của chúng. Chẳng hạn, tạo đối tượng WMEncoder để lấy con trỏ tới một giao diện IWMEncoder. Các con trỏ đến các giao diện khác, tuy nhiên, phải được lấy thông qua những đối tượng khác đã có sẵn. Chẳng hạn, để nhận giao diện IWMEncBroadcast, ta phải dùng phương thức get_Broadcast trong giao diện IWMEncoder vì ta không thể dùng CoCreateInstance()để nhận trực tiếp giao diện IWMEncBroadcast. Sơ đồ sau mô tả quan hệ các đối tượng trong Windows Media Encoder SDK và những đối tượng nào phụ thuộc đối tượng khác. 198 Hình 4-8 Cấp bậc đối tượng trong Windows Media Encoder SDK 199 Ví dụ C++ // Initialize the COM library. HRESULT hr = Coinitialize(NULL); // Create a WMEncoder object and retrieve an // IWMEncoder interface pointer. IWMEncoder* pEncoder = NULL; HRESULT hr = CoCreateInstance( CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder (void**) (&pEncoder)); // Create a broadcast interface. IWMEncBroadcast* pBrdCst = NULL; hr = pEncoder->get_Broadcast(&pBrdCst); 4.3.2.1 Đóng gói đối tượng: Các đối tượng và thư viện kiểu Windows Media Encoder SDK được tổ chức thành các thư viện liên kết động và các tập tin thực thi. Tên Mô tả Mspshell.dll Chứa giao diện IMSPropShell dùng để tạo các máy chủ chứa các trang tính năng dùng chung. Windows Media Encoder dùng IMSPropShell cài đặt các trang tính năng định nghĩa trước của giao diện người dùng Session Properties. Streameditor.dll Chứa giao diện IWMEncStreamEdit dùng để cắt và nối các 200 dòng trong tập tin Windows Media. Wmdevctl.dll Chứa các giao diện cần cho điều khiển các thiết bị số và dùng danh sách quyết định chỉnh sửa (edit decision list EDL). Wmedque.dll Chứa bộ lọc hàng đợi bản ghi. Wmenceng.dll Chứa các giao diện cần cho cấu hình và thao tác xử lý mã hóa. Wmencloc.dll Chứa các giao diện cần cho quản trị các ứng dụng Windows Media Encoder trên máy tính ở xa. Wmesrcwp.dll Chứa bộ bao mã nguồn. WMEncRes.dll Chứa các chuỗi tài nguyên của Windows Media Encoder. Wmex.dll Chứa các thành phần giao diện người dùng và giao diện IWMEncProfileManager. Các lớp này là các trang tính năng định nghĩa sẵn được điều khiển MSPropShell ActiveX dùng để tạo giao diện người dùng Session Properties. Wmexfmwp.dll Chứa bộ bao plug-in chuyển đổi. Wmexres.dll Chứa các chuỗi tài nguyên cho các trang tính năng. Wmprevu.dll Chứa giao diện IWMEncDataview dùng cho tạo các nội dung truyền thông xem trước và trong lúc mã hóa. Wmsservertypelib.dll Chứa thư viện kiểu mô hình đối tượng server, được dùng để lấy các số liệu thống kê server và họat động với DCOM. Wmenc.exe Chạy Windows Media Encoder và trình bày giao diện người dùng, chứa đối tượng WMEncoderApp và giao diện 201 IWMEncoderApp. Wmencagt.exe Chứa đối tượng WMEncoderAgent dùng để quản trị các ứng dụng Windows Media Encoder trên máy ở xa. Bảng 4-3 Các tập tin thư viện liên kết động và thực thi 4.3.2.2 Các tính năng: 4.3.2.2.1 Điều khiển các kết nối đến máy khách: Điều khiển truy cập đến máy tính đang chạy các ứng dụng Windows Media Encoder. Một cách để broadcast một dòng là cho phép các máy khách kết nối trực tiếp máy đang chạy ứng dụng Windows Media Encoder (tính năng kéo). Mặc định, tối đa 5 máy có thể kết nối. Các quản trị viên có thể thay đổi giới hạn này lên cực đại là 50 bằng cách chỉnh trong khóa registry HKEY_CLASSES_ROOT\Software\Microsoft\Windows Media Tools\Encoder\MaxClientConnections. Bởi vì mỗi kết nối hao tốn tài nguyên hệ thống và mạng, cần xem xét lại khả năng máy và môi trường truyền. Quá nhiều kết nối có thể làm quá tải máy và ngăn cản các máy khách chính đáng kết nối vào. Ta có thể ngăn cấm máy kết nối bằng cách áp mặt na địa chỉ IP để kết nối máy khách. Mặc định, bất kỳ máy khách chưa đến giới hạn kết nối đều được cho phép. Mặc dù Windows Media Encoder SDK không cung cấp sẵn API để làm việc này, ta có thể dùng Windows Media Format. Để biết thêm thông tin, xem thêm giao diện IWMAddressAccess và IWMAddressAccess2 trong trợ giúp của Windows Media Format. 4.3.2.2.2 Dùng DCOM: Distributed Component Object Model (DCOM – mô hình đối tượng thành phần phân phối) là một nghi thức cho phép các thành phần phần mềm liên lạc trực tiếp thông 202 qua mạng dùng TCP/IP. DCOM có thể dùng với Windows Media Encoder khi ta đang quản trị từ xa các máy đang chạy ứng dụng Windows Media Encoder, và trên các server Windows Media khi ta dùng tính năng đẩy. 4.3.2.3 Tìm hiểu codec: Nội dung âm thanh và hình ảnh có thể tiêu tốn nhiều băng thông dẫn dòng và tạo tập tin lớn. Bằng cách nén lại, nó có thể broadcast trên những băng thông Internet phổ biến và lưu thành tập tin Windows Media với kích thước vừa phải. Ta có thể nén nội dung bằng cách áp dụng các thuật toán nén cho dữ liệu, dựa vào chất lượng đầu ra mong muốn và băng thông khả dụng. Trước khi nội dung được trình diễn, nội dung được giải nén bằng các thuật tóan giải nén. Những thuật toán nén và giải nén như thế gọi là các codec. Bảng sau cung cấp thông tin về các codec khả dụng trong Windows Media Encoder Series. Codec Description Windows Media Audio 9 Professional Tạo âm thanh full surround trên những máy tính cài đặt card âm thanh đa kênh và Windows XP. Cung cấp nội dung âm thanh trong Windows Media Format để chơi lại trên thiết bị xem như đầu đĩa DVD hay hộp set-top. Windows Media Audio 9 Lossless Cung cấp mã hóa toàn vẹn về âm thanh. Windows Media Audio 9 Cung cấp chất lượng âm thanh không gì sánh kịp cho dẫn dòng băng hẹp Internet và âm nhạc download hi-fi. Hỗ trợ mã hóa VBR. Tương thíc hòan tòan với mọi phiên bản Windows Media Player. Windows Media Cung cấp chất lượng tốt cho nội dung âm thanh với tiếng nói. 203 Audio 9 Voice Windows Media Video 9 Tăng cường chất lượng hình ảnh cho người dùng Internet băng rộng và phân phối phim hình gần như DVD với tốc độ lên đến 400 Kbps. Cho phép chơi lại chất lượng sắc nét hơn bằng cách kết hợp nội dung trên TV và hộp set-top. Windows Media Video 8.1 Hỗ trợ nhiều loại băng thông mạng. Giảm việc trùng lắp nội dung trước khi mã hóa. Windows Media Video 7 Cho phép người dùng Windows Media Player 7 xem các nội dung phim hình đã mã hóa mà không cần phải download về bộ codec mới nhất. Lựa chọn tốt nhất cho những máy tính không thể hỗ trợ những yêu cầu trình diễn của các codec mới nhất. Windows Media Video 9 Screen Cung cấp cải thiện xử lý các hình bóng, chuyển động trên màn hình, và cuộn cho chụp màn hình. Hỗ trợ CBR và VBR một bước mã hóa mà không rớt khung. Codec này thì tối ưu hóa hòan toàn cho cả kịch bản dẫn dòng và download. Bảng 4-4 Các codec 4.3.2.4 Các yêu cầu về tính năng: Các tính năng. Feature Windows Media Player Operating system Codec 6.4 7.1/Windows® XP 9 Series 204 Interlaced output video X Microsoft Windows XP Windows Media Video 9 Nonsquare pixel output X Multiple- resolution MBR content X DRM support X X X Multichannel audio X Microsoft Windows XP Windows Media Audio 9 Professional High-resolution audio (24-bit, 96 kHz) X Microsoft Windows XP Windows Media Audio 9 Professional Dynamic range control X Microsoft Windows XP Windows Media Audio 9 Professional CBR encoding (one- or two- pass) X X X See the following table. Quality based VBR X X See the following table. 205 Bit rate-based VBR X X See the following table. Peak bit rate- based VBR X X See the following table. Bảng 4-5 Các tính năng Bảng tiếp theo này ghi những phương thức mã hóa cho các codec. Codec One- pass CBR Two- pass CBR Quality based VBR Bit rate- based VBR Peak bit rate- based VBR Windows Media Audio 9 Professional Có Có Có Có Có Windows Media Audio 9 Lossless Không Không Có Không Không Windows Media Audio 9 Có Có Có Có Có Windows Media Audio 9 Voice Có Không Không Không Không Windows Media Có Có Có Có Có 206 Video 9 Windows Media Video 8.1 Có Có Có Có Có Windows Media Video 7 Có Có Có Có Có Windows Media Video 9 Screen Có Không Có Không Không Bảng 4-6 Các phương thức mã hóa hỗ trợ 4.3.2.5 Phần mở rộng của tập tin: Phần mở rộng của tập tin cung cấp thông tin về nội dung chứa trong tập tin: o Các ứng dụng tạo ra các tập tin Windows Media chứa dòng âm thanh, dòng kịch bản hay cả hai phải dùng phần mở rộng .wma. o Các ứng dụng tạo ra các tập tin Windows Media chứa cả dòng hình ảnh, dòng âm thanh phải dùng phần mở rộng .wmv. Các tập tin này cũng chứa dòng kịch bản. o Tập tin chứa cấu hình Windows Media Encoder định nghĩa trước phải dùng phần mở rộng .wme. o Profile dùng phần mở rộng .prx. Chú ý: Ta có thể dùng phần mở rộng .asf đổi chỗ qua lại với .wmv và .wma, tuy nhiên, .wmv và .wma xác định loại nội dung. 4.3.2.6 Lập trình bằng C++: Chủ đề này nói những lưu ý về lập trình trong C++. Nếu không nói rõ, các ví dụ về sau sử dụng Microsoft Visual C++® 6.0. Từ đây trở đi, tuy ta chú trọng vào lập 207 trình bằng C++. C++ khá linh động trong viết mã nhưng bù lại, thảo chương khá dài và yêu cầu cẩn thận cao hơn so với VB và C#. Khi lập trình trong C++, ta phải theo các tập tin tiêu đề cần thiết vào project: Tập tin tiêu đề Mô tả localagent.h Các giao diện cho phép quản trị từ xa với các ứng dụng Windows Media Encoder. mspropshell.h Các giao diện cho phép cài đặt các hộp thoại chứa các trang tính năng định nghĩa sẵn. wmdevctl.h Các giao diện cho điều khiển thiết bị số. wmdrmprf.h Các giao diện cho bảo vệ nội dung với DRM. wmencode.h Các giao diện dùng để cấu hình và chạy các ứng dụng Windows Media Encoder. wmencvu.h Giao diện được dùng để tạo và chạy phần xem trước của dòng. wmsencid.h Một tập hòan chỉnh các định nghĩa DISPID. Bảng 4-7 Các tập tin tiêu đề Thay vì thêm các tập tin tiêu đề wmencode.h và mspropshell.h, ta có thể sử dụng các thư viện phát sinh các lớp bao để đơn giản hóa các giao diện COM liên quan: #import "WMEnc.exe" #import "MSPShell.dll" 4.3.2.7 Tạo ứng dụng mã hóa: Để tạo một ứng dụng mã hóa, ta thường trải qua các bước sau: 208 1. Tạo một đối tượng Encoder. 2. Tạo một nhóm nguồn để giữ các dòng đa truyền thông ta muốn mã hóa, và sau đó thêm các dòng đa truyền thông (chẳng hạn, một tập tin hay dữ liệu đầu vào từ card chụp màn hình) vào nhóm nguồn. 3. Chọn profile mã hóa. Một profile cho biết loại codec nào được dùng để mã hóa nội dung và xác định số lượng và tốc độ bit của dòng xuất. 4. Xác định nhu cầu muốn broadcast nội dung đã mã hóa thành dòng, lưu vào tập tin, hay cả hai. 5. Tùy chọn, ta cũng có thể: o Thêm thông tin mô tả (như tựa và bản quyền) và các thuộc tính tùy biến. o Xử lý trước phim hình, chẳng hạn lọc và xén lại, hay xác định các thiết lập tối ưu hóa. o Thêm họa tiết. o Bảo vệ nội dung bằng cách mật mã hóa với DRM. 6. Khởi động mã hóa. 4.3.2.7.1 Tạo đối tượng Encoder: Tùy thuộc vào ta tạo giao diện người dùng (UI) như thế nào: o Khi dùng UI tùy biến, tạo một đối tượng WMEncoder trực tiếp bằng cách dùng giao diện IWMEncoder trong C++. o Khi thể hiện các thành phần UI định nghĩa sẵn từ Windows Media Encoder, lấy đối tượng WMEncoder từ WMEncoderApp hay IWMEncoderApp. Đối tượng WMEncoderApp phải có phạm vi module tồn tại bên ngoài thủ tục. 4.3.2.7.2 Tạo đối tượng WMEncoder với giao diện tùy biến: Ví dụ C++ // Include libraries. #include 209 #include "wmencode.h" // Declare variables. HRESULT hr = S_OK; IWMEncoder* pEncoder = NULL; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder; } // Release pointers. if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.3 Tạo đối tượng WMEncoder khi hiển thị giao diện người dùng ứng dụng định nghĩa sẵn: 210 Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncoderApp* pEncoderApp; // Initialize the COM library and retrieve a pointer // to an IWMEncoderApp interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoderApp, NULL, CLSCTX_LOCAL_SERVER, IID_IWMEncoderApp, (void**) &pEncoderApp); } // Display the user interface. if ( SUCCEEDED( hr ) ) { hr = pEncoderApp->put_Visible(VARIANT_TRUE); } // Acquire an IWMEncoder interface. if ( SUCCEEDED( hr ) ) 211 { hr = pEncoderApp->get_Encoder(&pEncoder); } // Release pointers. if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } if ( pEncoderApp ) { pEncoderApp->Release(); pEncoderApp = NULL; } 4.3.2.7.4 Thao tác trên các nguồn và nhóm nguồn: Windows Media Encoder SDK dùng khái niêm “nguồn” và “nhóm nguồn” để xác định các dòng nhập ta muốn mã hóa: o Một nguồn là một dòng âm thanh, dòng hình ảnh, dòng HTML, hay dòng kịch bản. o Một nhóm nguồn là một sưu tập các nguồn bao gồm tổ hợp bất kỳ của một nguồn âm thanh, một nguồn hình ảnh, một nguồn HTML, và một nguồn kịch bản. Chẳng hạn, để mã hóa một buổi hòa nhạc sống, ta sẽ thiết lập một nhóm nguồn gồm một nguồn âm thanh và một nguồn hình ảnh. Để mã hóa trình diễn PowerPoint, ta 212 phải thiết lập một nhóm nguồn gồm một nguồn âm thanh, một nguồn hình ảnh và một nguồn HTML. Ta có thể thiết lập nhiều nhóm nguồn trong một session mã hóa để mã hóa đồng thời các nội dung khác nhau. Chẳng hạn, để broadcast một buổi họp công ty trực tuyến, ta sẽ thiết lập bốn nhóm nguồn tương ứng với sự kiện chính, phim hình chào mừng, phim hình lúc ngừng, và phim hình lúc bế mạc. Hình 4-9 Mô tả 4 nhóm nguồn Chỉ một nhóm nguồn có thể họat động tại một thời điểm; ta có thể hoặc đặt một nhóm nguồn hoạt động, hay có các nhóm nguồn xoay dần theo thứ tự khi cái đầu tiên kết thúc mã hóa. Xác định các nguồn cho một session mã hóa theo các bước sau: 1. Tạo một sưu tập nhóm nguồn để giữ các nhóm nguồn dùng IWMEncSourceGroupCollection. 2. Tạo một nhóm nguồn để giữ một hay nhiều nguồn đầu vào dùng IWMEncSourceGroup. 213 3. Tạo các đối tượng cho các nguồn đầu vào và thêm chúng vào nhóm nguồn dùng IWMEncSource. 4. Dùng IWMEncSource, cho biết loại nguồn đầu vào. Nếu nguồn là một thiết bị (chẳng hạn là card bắt hình hay máy quay phim DV), trước hết ta phải liệt kê số nguồn khả dụng trên hệ thống dùng IWMEncPluginInfo, IWMEncSourcePluginInfoManager, và IWMEncDeviceControlPluginInfoManager. Ở đây, ta sẽ xem xét kỹ chủ đề : “Dùng chụp màn hình như là nguồn”, cho biết làm cách nào dùng chụp màn hình như một nguồn hình ảnh. Dùng chụp màn hình như một nguồn Ta có thể dùng chụp màn hình như một nguồn hình ảnh. Plug-in chụp màn hình cho phép bắt hình ở mọi phần của màn hình, chẳng hạn, để bắt di chuyển của mouse để mô tả một quá trình. Ta cũng có thể chụp từ một card nối đến thiết bị chuyển đổi quét. Ta cần cấu hình plug-in để xác định khu vực ta muốn chụp. Một cách là dùng giao diện IPropertyBag (xem ví dụ C++ ở dưới). Cân nhắc các tham khảo sau để cải thiện việc chụp màn hình: o Dùng Windows Media Video 9 codec. o Dùng card đồ họa nhanh hơn. o Dùng máy tính cấu hình mạnh hay máy tính với bộ đôi vi xử lý. o Vô hiệu hóa tăng tốc phần cứng. Từ Control Panel Display Properties, và tab Settings, click Advanced. Trên tab Troubleshoot, kéo slide thiết lập tăng tốc phần cứng về None. o Giảm chất lượng màu để giảm số lượng dữ liệu mà card đồ họa cần xử lý. Từ Control Panel Display Properties, trên tab Settings, click thiết lập thấp hơn cho Color quality. o Chạy ứng dụng mã hóa trong 256 màu. Right-click tập tin thực thi, chọn Properties, và trên tab Compatibility, chọn Run in 256 colors. 214 o Chỉnh sửa profile để giảm tốc độ khung và kích thước bắt ảnh. Tăng cường tần suất bit cũng cho kết quả tốt hơn. o Đóng hết những ứng dụng không cần thiết. o Bỏ ảnh nền. Ví dụ Visual Basic sau mô tả việc dùng chụp màn hình như là một nguồn. Ví dụ C++ mô tả cấu hình chụp màn hình dùng property bag. Ví dụ C++ // Include libraries. #include #include #include #include "C:\WMSDK\WMEncSDK9\include\wmencode.h" // Define the screen capture properties. #define WMSCRNCAP_CAPTUREWINDOW CComBSTR("CaptureWindow") #define WMSCRNCAP_WINDOWLEFT CComBSTR("Left") #define WMSCRNCAP_WINDOWTOP CComBSTR("Top") #define WMSCRNCAP_WINDOWRIGHT CComBSTR("Right") #define WMSCRNCAP_WINDOWBOTTOM CComBSTR("Bottom") #define WMSCRNCAP_FLASHRECT CComBSTR("FlashRect") #define WMSCRNCAP_ENTIRESCREEN CComBSTR("Screen") #define WMSCRNCAP_WINDOWTITLE CComBSTR("WindowTitle") // Declare variables. HRESULT hr = S_OK; IWMEncoder* pEncoder; IWMEncSourceGroupCollection* pSrcGrpColl; 215 IWMEncSourceGroup* pSrcGrp; IWMEncSource* pSrc; IWMEncVideoSource2* pSrcVid; IPropertyBag* pPropertyBag; CComVariant varValue; // Initialize the COM library and retrieve a pointer to an IWMEncoder interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Retrieve the source group collection. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl); } // Add a source group to the collection. if ( SUCCEEDED( hr ) ) { hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp); 216 } if ( SUCCEEDED( hr ) ) { hr = pSrcGrp->AddSource(WMENC_VIDEO, &pSrc); } // Retrieve an IWMEncVideoSource2 pointer. if ( SUCCEEDED( hr ) ) { hr = pSrc->QueryInterface(IID_IWMEncVideoSource2, (void**)&pSrcVid); } // Add a video source to the source group. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->SetInput(CComBSTR("ScreenCap://ScreenCapture1")); } // Retrieve a pointer to the property bag. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->QueryInterface(IID_IPropertyBag, (void**)&pPropertyBag); } // Set full screen capture. { varValue = true; 217 if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_ENTIRESCREEN, &varValue ); } } // Set the capture area. { // nLeft, nRight, nTop, and nBottom are the dimensions to capture int nLeft, nRight, nTop, nBottom; // Initialize the capture area. The size must be even. varValue = false; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_ENTIRESCREEN, &varValue ); } varValue = nLeft; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWLEFT, &varValue ); } varValue = nRight; if ( SUCCEEDED( hr ) ) { 218 hr = pPropertyBag->Write( WMSCRNCAP_WINDOWRIGHT, &varValue ); } varValue = nTop; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWTOP, &varValue ); } varValue = nBottom; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWBOTTOM, &varValue ); } varValue = true; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_FLASHRECT, &varValue ); } // Continue configuring the encoding session. // Release pointers. if ( pSrcGrpColl ) { pSrcGrpColl->Release(); 219 pSrcGrpColl = NULL; } if ( pSrcGrp ) { pSrcGrp->Release(); pSrcGrp = NULL; } if ( pSrcVid ) { pSrcVid->Release(); pSrcVid = NULL; } if ( pSrc ) { pSrc->Release(); pSrc = NULL; } if ( pPropertyBag ) { pPropertyBag->Release(); pPropertyBag = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 220 } 4.3.2.7.5 Thao tác với profile : Một profile xác định codec nào được dùng để nén và quyết định số lượng dòng xuất và tần suất bit của chúng. Mỗi profile nhắm đến các người dùng và mục đích khác nhau. Chẳng hạn, một profile có thể với chất lượng dựa trên variable bit rate (VBR) cho download tập tin, trong khi profile khác dùng constant bit rate (CBR) để tạo dòng. Mỗi profile được dùng cho một số xác định và loại các dòng nguồn. Chỉ có một profile có thể liên quan đến mỗi nhóm nguồn tại một thời điểm. và mọi nhóm nguồn phải dùng cùng profile trong sessiion mã hóa. Ta có thể dùng profile tùy biến (các tập tin .prx ) hay các profile hệ thống đi kèm với Windows Media Encoder SDK. Dành cho các ứng dụng mã hóa mới, ta nên tạo và dùng các profile tùy biến để đáp ứng nhu cầu của người dùng. Các profile hệ thống không cập nhật cho các codec mới và không hỗ trợ tương thích ngược. 4.3.2.7.6 Thêm thông tin phụ: o Thông tin hiển thị: thông tin sẽ xuất hiện trong trình chơi nhạc, bao gồm tên tác giả và tên nghệ sĩ, tựa bài, mô tả, xếp loại, và bản quyền. Dùng IWMEncDisplayInfo để thêm thông tin này. o Thuộc tính của người dùng: thông tin này thêm vào form có từng cặp tên-giá trị mà ta định nghĩa, cho phép ta thêm vào các thông tin thêm về session mã hóa. Chẳng hạn, ta có thể thêm ngày và thể loại vào bằng cách dùng IWMEncAttributes. Ví dụ thêm thuộc tính tùy biến vào trong một tập tin truyền thông. Ví dụ C++ #include #include // Includes _bstr_T and _variant_T. #include // Includes CComBSTR. 221 #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncAttributes* pAttr; CComBSTR m_bstrName; CComVariant m_varValue; CComVariant m_varIndex; CComVariant m_varRemove; long cnt; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. hr = CoInitialize( NULL ); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Retrieve a pointer to an IWMEncAttributes interface. if ( SUCCEEDED( hr ) ) 222 { hr = pEncoder->get_Attributes( &pAttr ); } // Add name-value pairs to the attributes collection. _bstr_t bName[] = { _bstr_t("Date Created: "), _bstr_t("Time Created: "), _bstr_t("File Content: ") } _variant_t vVal[] = { _variant_t("02/15/2000"), _variant_t("13:30:15"), _variant_t("multimedia data"), } for( int i = 0; i < 3 && SUCCEEDED(hr); i++ ) { hr = pAttr->Add(bName[i],vVal[i]); } // Retrieve the name-value pairs from the collection. if ( SUCCEEDED( hr ) ) { hr = pAttr->get_Count(&cnt); 223 } for ( i = 0; i < cnt && SUCCEEDED( hr ); i++ ) { hr = pAttr->Item(i, &m_bstrName, &m_varValue); } // Remove an attribute by name. if ( SUCCEEDED( hr ) ) { m_varRemove = "File Content: "; hr = pAttr->Remove(m_varRemove); } // Remove an attribute by index. if ( SUCCEEDED( hr ) ) { m_varRemove = 0; hr = pAttr->Remove(m_varRemove); } // Remove all attributes. if ( SUCCEEDED( hr ) ) { hr = pAttr->RemoveAll(); } 224 // Release pointers. if ( pAttr ) { pAttr->Release(); pAttr = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.7 Tiền xử lý âm thanh và hình ảnh: Cho phép thực hiện việc lọc khung, xén hình, và tạo họa tiết cho dữ liệu đầu ra. Ta không đi sâu vào các chi tiết phức tạp của phần này. 4.3.2.7.8 Xác định dữ liệu đầu ra: 4.3.2.7.8.1 Lưu nội dung mã hóa xuống tập tin: Ta có thể lưu nội dung của một tập tin Windows Media, hoặc song song với ứng dụng broadcast hoặc chỉ riêng lưu tập tin. Ta có thể hạn chế kích thước tập tin xuất khi lưu, hoặc bằng khỏang xử lý dài nhất hay kích thước tập tin lớn nhất. Ta cũng có thể xác định nhóm nguồn nào cần lưu trữ. Chẳng hạn, nếu ta mã hóa một màn hình chào mừng tĩnh, một buổi trình diễn sống và một màn hình kết thúc tĩnh, ta có thể chỉ muốn lưu trữ buổi trình diễn sống. Mặc định, các nhóm nguồn tự động lưu trữ, vì vậy đặt thuộc tính AutoArchive trong IWMEncSourceGroup.AutoArchive để Dừng hẳn hoặc Ngưng các nhóm nguồn ta không muốn lưu. 225 Để điều khiển bằng tay việc khởi động, dừng, ngưng quá trình xử lý lưu, đặt phương thức Archive dùng IWMEncoder hay WMEncoder. Mặc định, việc lưu trữ bắt đầu ngay khi mã hóa bắt đầu. Nếu muốn điều khiển bằng tay, đặt thuộc tính EnableAutoArchive bằng false. Ví dụ mô tả việc lưu nội dung mã hóa xuống tập tin bằng IWMEncFile2. Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncFile* pFile; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Specify a file in which to save encoded content. 226 if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_File(&pFile); } if ( SUCCEEDED( hr ) ) { hr = pFile->put_LocalFileName(CComBSTR("C:\\filename.wmv")); } // Release pointers. if ( pFile ) { pFile->Release(); pFile = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.8.2 Đẩy một dòng lên Windows Media Server Ta có thể broadcast một dòng bằng cách đẩy nó lên một Windows Media Server, rất hữu ích khi ta muốn khởi tạo kết nối từ một ứng dụng mã hóa. Khi đẩy một dòng lên một Windows Media Server, ta cần biết : o Tên của Windows Media Server. Tên này có thể là alias, một fully qualified domain name, hay địa chỉ IP. 227 o Tên của điểm xuất bản mới hay có sẵn. o Tùy chọn, tên điểm xuất bản cho cấu hình thiết lập. Đây là phần liên quan đến phiên bản Windows hỗ trợ Windows Media Server, ta không đi sâu vào phần này. 4.3.2.7.8.3 Broadcast một dòng từ ứng dụng Windows Media Encoder: Broadcast một dòng bằng cách cho phép những máy khách (Windows Media Server, Web Server, hay player) để kết nối trực tiếp với máy chạy ứng dụng Windows Media Encoder để kéo dòng về. Máy khách kết nối với dòng bằng cách dùng chỉ:cổng cho kết nối Internet hay ổng cho kết nối LAN. Ta có thể ngăn cấm truy cập theo mặt nạ IP. Để broadcast một dòng từ máy chủ, dùng IWMEncBroadcast để xác định nghi thức và số hiệu cổng để có thể broadcast. Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncBroadcast* pBrdcst; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. 228 if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Specify a broadcast protocol and port number. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_Broadcast(&pBrdcst); } if ( SUCCEEDED( hr ) ) { hr = pBrdcst->put_PortNumber(WMENC_PROTOCOL_HTTP, 8080); } // Release pointers. if ( pBrdcst ) { pBrdcst->Release(); pBrdcst = NULL; } if ( pEncoder ) { 229 pEncoder->Release(); pEncoder = NULL; } 4.3.2.8 Quản trị từ xa ứng dụng mã hóa: Quản trị viên có thể điều khiển nhiều thể hiện các ứng dụng Windows Media Encoder trên máy ở xa hoặc bằng LAN hay Internet. Bằng cách dùng các giao diện IWMEncAgentLocator, IWMEncoderAgent và IWMEncoderNamesCollection, ta có thể viết các ứng dụng cho phép : o Tạo các đối tượng WMEncoderApp trên các máy ở xa. o Liệt kê các đối tượng WMEncoder trên máy cho trước. o Kết nối và điều khiển một đối tượng WMEncoder. o Quan sát trạng thái của quá trình xử lý mã hóa. Windows Media Encoder phải cài sẵn trên máy ở xa, và ta phải dùng tiện ích cấu hình DCOM để thiết lập việc khởi phát, truy cập, và cho phép cấu hình cho cả Windows Media Encoder và Windows Media Encoder Agent. Để tạo các đối tượng WMEncoderApp, đối tượng WMEncoderAgent phải chạy trên máy ở xa. Ta có thể khởi động đối tượng WMEncoderAgent bằng tay hay tự động. 4.3.2.9 Phụ chú: Các phần ta không đi sâu, để biết rõ hơn có thể xem ở tài liệu Windows Media Encoder SDK Documentation đi kèm với bộ SDK. Chương 5 Tổng kết 5.1 Kết luận: 5.1.1 Kết quả đạt được: Sau khi thực hiện đề tài, chúng em thu được một số kết quả sau: 230 • Tìm hiểu được công nghệ truyền hình ảnh âm thanh trên mạng LAN và Internet H323. Đây là một công nghệ mã nguồn mở đa nền, rất hữu ích trong việc viết các ứng dụng chạy trên nhiều hệ điều hành khác nhau. • Tìm hiểu được bộ phát triển phần mềm Microsoft Windows Media Encoder. Với khả năng tích hợp chặt chẽ với hệ điều hành Windows, Windows Media Encoder SDK rất thích hợp cho tìm hiểu các khái niệm về mã hóa, giải mã các dòng âm thanh, hình ảnh trên hệ điều ảnh Windows. • Tìm hiểu được nghi thức RFB, một nghi thức đơn giản nhằm giao tiếp điều khiển máy tính từ xa. Chúng em cũng thu lượm được các kiến thức về vùng đệm khung dành cho màn hình, khả năng xây dựng tối ưu hóa cách viết mã từ mã nguồn mở của nghi thức. • Tìm hiểu được các kỹ thuật kiểm sóat hệ thống một cách triệt để, khả năng lập trình tương tác cấp thấp với bộ nhớ, thiết bị, tùy biến giao diện trên cũng như các cơ chế quản lý hệ thống của hệ điều hành Windows. • Xây dựng thành công một chương trình điều khiển máy tính từ xa, đồng thời qua đó, nắm được khả năng tích hợp và sử dụng được các đồ án mã nguồn mở do cộng đồng công nghệ thông tin thế giới cung cấp không vụ lợi. 5.1.2 Hạn chế: Mặc dù chúng em đã cố gắng hết sức nhưng ứng dụng vẫn còn một số hạn chế nhất định: • Ứng dụng vẫn chưa kiểm tra được tính ổn định cao trên nhiều máy. • Chưa tối ưu hóa trong việc truyền gởi dữ liệu giữa chương trình điều khiển và chương trình bị điều khiển. • Ứng dụng có thể chiếm dụng bộ nhớ khi thực hiện việc quan sát màn hình máy khách. 231 5.2 Hướng phát triển Với những kết quả đạt được và những hạn chế nêu trên, đề tài có thể mở rộng theo các hướng sau: • Mở rộng khả năng kiểm soát : không những hệ thống máy khách mà cả nội dung người dùng lướt web bằng các cách như lọc liên kết, nội dung trang web. • Mở rộng thêm các loại hình phục vụ : như nhắn tin điện thoại di động… • Cải thiện độ ổn định và vấn đề bộ nhớ cho chương trình. 232 TÀI LIỆU THAM KHẢO Tài liệu viết : Tài liệu trong nước [1] Nguyễn Tri Tuấn, Cơ sở lý thuyết về lập trình sự kiện và hook (chặn các thông điệp), môn học Lập trình C trên Windows, 24/2/2004. [2] Nguyễn Tri Tuấn, Thư viện liên kết động, môn học Lập trình C trên Windows, 24/2/2004. Tài liệu nước ngoài [3] Robert Kuster, Three Ways to Inject Your Code into Another Process, www.codeproject.com, 25/7/2003 cập nhật 21/8/2003. [4] António Feijão, Lock Windows Desktop, www.codeproject.com, 14/6/2004 cập nhật 9/12/2004. [5] Fad B, Using GINA.DLL to Spy on Windows User Name & Password And to Disable SAS (Ctrl+Alt+Del), www.codeproject.com, 22/8/2003. [6] =[ Abin ]=, An All-Purpose Keyboard Hooker, www.codeproject.com, 13/5/2004 cập nhật 31/5/2004. [7] Microsoft Development Network (MSDN), tài liệu các loại, Microsoft Visual Studion 6.0, 10/2003. [8] Joseph M. Newcomer, Hook and DLLs, www.codeproject.com, 1/4/2001. [9] Derek Lakin, CTabCtrlSSL - An easy to use, flexible extended tab control, www.codeproject.com, 21/9/2001. [10] dang!, Ownerdraw Tab Controls - Borders and All, www.codeproject.com, 31/1/2002 cập nhật 1/7/2002. [11] Barry, Barry's Screen Capture, www.codeguru.com, 4/2/2003. 233 [12] P.GopalaKrishna, Various methods for capturing the screen, 24/8/2003. [13] Carlos Antollini, A set of ADO Classes - version 2.04, www.codeproject.com, 25/4/2001 cập nhật 3/8/2002. [14] Tristan Richardson, The RFB Protocol version 3.8, RealVNC Ltd, 8/3/2005. [15] Davide Calabro, CButtonST v3.9 (MFC Flat buttons), www.codeproject.com, 25/11/1999 cập nhật 29/3/2003. [16] Nischant S, Tile, center and stretch a bitmap as your MFC dialog background, www.codeproject.com, 7/6/2002. [17] PJ Naughter, Splasher v1.32 - A Splash Screen Implementation, www.codeproject.com, 4/3/2000. [18] Mark Jackson, Sort List Control, www.codeproject.com, 7/9/2001. [19] Chris Maunder, Adding Icons to the System Tray, www.codeproject.com, 30/11/1999 cập nhật 3/8/2003. Websites : [20] Codeproject, [21] RealVNC Ltd, [22] H323, [23] Vox Gratia, [24] Microsoft Corporation, [25] Codeguru, [26] Source Forge,

Các file đính kèm theo tài liệu này:

  • pdfCNTT1012.pdf
Tài liệu liên quan