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.
233 trang |
Chia sẻ: haianh_nguyen | Lượt xem: 1382 | Lượt tải: 0
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:
- CNTT1012.pdf