̇ Trong quá trình h p, roomleader có th thêm thành viên.. 1-1 0-N Password UserName Depart ment UserPosit ion St atus id: UserID USER BeginPoint EndP oint ROOM-USER RoomID RoomName T o p
Trang 1GI I THI U 1
PHÂN TÍCH VÀ THI T K 2
1 Phân tích 2
1.1 Phân tích yêu c u 2
1.2 Phân tích ch c n ng 2
1.2.1 Lên l ch h p (ch c n ng c a ng i qu n tr ) 2
1.2.2 C p nh t và hu l ch h p 2
1.2.3 Qu n lí ng i dùng 2
1.2.4 Cu c h p 2
1.2.5 Cu c i tho i 3
2 Thi t k 3
2.1 Thi t k c s d li u 3
2.1.1 S quan ni m d li u 3
2.1.2 Mô t các th c th 3
2.1.3 S quan h d li u 5
2.1.4 Mô t chi ti t các b ng 5
2.2 Thi t k x lý 7
2.2.1 Lên l ch h p 7
2.2.2 C p nh t l ch h p 7
2.2.3 Hu l ch h p 7
2.2.4 Qu n lý ng i dùng 7
2.2.5 Qu n lý cu c h p 8
2.2.6 Qu n lý cu c i tho i 9
K THU T VÀ CÔNG NGH 11
1 T ng quan 11
1.1 Khái ni m c b n 11
1.1.1 Nén không m t d li u 11
1.1.2 Nén m t d li u 11
1.1.3 So sánh gi a hai ki u nén 12
1.1.4 M t s khái ni m c b n trong vi c thu nh n, truy n và trình di n d li u âm thanh, hình nh 12 1.2 Gi i thi u JMF 14
1.2.1 C u trúc c p cao 15
1.2.2 B qu n lý 16
1.2.3 Các d ng c a d li u 17
1.2.4 nh d ng d li u 18
1.2.5 Các b i u khi n chu n 18
2 RTP và JMF 20
2.1 RTP 20
Trang 22.1.1 Gi i thi u 20
2.1.2 C u trúc RTP 20
2.2 Truy n d li u v i RTP 22
2.2.1 Thu nh n d li u v i RTP 22
2.2.2 Truy n d li u v i RTP 24
2.3 Thu nh n và trình di n d li u v i JMF 28
2.3.1 Thu nh n d li u v i JMF 28
2.3.2 Các thành ph n trình di n d li u 33
2.3.3 Trình di n d li u v i JMF 38
2.3.4 T o m t Player .38
3 K thu t nén và mã hóa d li u 43
3.1 Nén âm thanh 43
3.1.1 Gi i thi u m t s thu t toán nén âm thanh thông d ng 43
3.1.2 Thu t toán nén u-law và a-law 43
3.1.3 Các i m t ng ng gi a A-law và u-law 46
3.1.4 Các i m khác bi t gi a u-lau và A-law 46
3.2 Nén hình nh 46
3.2.1 Các nguyên t c c a nén nh 46
3.2.2 M t s thu t toán nén nh thông d ng 47
3.2.3 Gi i thi u thu t toán nén nh JPEG 47
3.2.4 Thu t toán mã hóa và gi i mã chu n JPEG 48
3.2.5 Thu t toán gi i mã tiêu chu n JPEG 50
3.3 Mã hoá d li u v i MD5 50
3.3.1 Khái ni m v mã b m 51
3.3.2 C u trúc c b n c a các thu t toán hàm b m 51
3.3.3 Thu t toán b m MD5 51
3.3.4 Mô hình ch ng th c m t kh u 52
TRI N KHAI VÀ CÀI T 53
1 Các ch c n ng dành cho ng i dùng 53
1.1 Giao di n chính sau khi ng nh p 53
1.2 T o và th c hi n cu c i tho i 53
1.2.1 T o cu c i tho i 53
1.2.2 Truy n âm thanh và hình nh 54
1.2.3 K t thúc i tho i 54
1.3 Th c hi n cu c h p 54
1.3.1 M cu c h p 54
1.3.2 Truy n âm thanh và hình nh 56
1.3.3 R i kh i cu c h p 56
1.4 Các ch c n ng khác 56
1.4.1 Xem danh sách nh ng thành viên trong cu c h p 56
2 Các ch c n ng dành cho ng i qu n lý h th ng: 57
2.1 Qu n lý thông qua ch ng trình: 57
Trang 32.1.1 Qu n lý cu c h p: 57
2.1.2 Qu n lý ng i dùng 59
2.2 Qu n lý thông qua giao th c HTTP 63
2.2.1 Màn hình ng nh p 63
2.2.2 Màn hình chính 63
2.2.3 Qu n lí ng i dùng 64
2.2.4 Qu n lí phòng h p 66
2.2.5 Qu n lý các cu c i tho i 69
3 ánh giá và h ng phát tri n 70
3.1 ánh giá 70
3.1.1 u i m 70
3.1.2 Khuy t i m 70
3.2 H ng phát tri n 71
Trang 5Hi n nay, nhu c u giao ti p c a con ng i ngày càng l n Nh t là trong nh ng t ch c hay công ty, nhu c u trao đ i, th o lu n gi a nh ng ng i không cùng phòng ban r t l n Nh ng
cu c h p đông ng i hay nh ng cu c th o lu n nhóm th ng r t m t th i gian trong vi c đi
l i Thông th ng, các công ty hay s d ng nh ng t ng đài đi n tho i Nh ng vi c đó làm t n chi phí l p đ t t ng đài, h n n a kh n ng phát tri n thêm các tính n ng m i nh truy n t p tin, truy n hình nh, hay trao đ i là không th
V i h th ng m ng ngày càng phát tri n, khó kh n đó đ c gi i quy t b ng mô hình Net Conference D a trên mô hình đó, chúng tôi đ a ra m t gi i pháp đ gi i quy t các v n đ trên
Ph n m m h p và trao đ i thông tin tr c tuy n đ c thi t k đ ph c v cho các m c đích:
̇ Giao ti p, đ i tho i gi a hai ng i
̇ Giao ti p, đ i tho i gi a m t nhóm ng i (có lên l ch tr c)
̇ Trao đ i thông tin
Ph n m m này giúp cho nh ng nhân viên có th liên l c trong n i b công ty m t cách d dàng, h không c n đi l i hay m t c c phí đi n tho i mà v n có th nói chuy n, nhìn th y nhau Ph n m m đáp ng nhu c u c a nhân viên trong cùng m t công s mu n giao d ch, trao
đ i thông tin, tài li u, hình nh… ng th i giúp t o, qu n lý và trao đ i d li u âm thanh, hình
nh c a m t cu c h p Ph n m m đ m b o t t vi c truy n d li u âm thanh, hình nh nh n t microphone và WebCam Do các d li u đ u đ c nén tr c khi truy n, nên đ m b o vi c truy n v i th i gian th c ng th i, v i vi c nén các tín hi u âm thanh hình nh v n t n r t nhi u đ ng truy n khi truy n làm gi m chi phí trên m ng nên không làm ngh n m ng Ph n
m m có th truy n âm thanh và hình nh gi a hai ng i ho c gi a m t nhóm ng i Ngoài ra,
ph n m m có c các ch c n ng chat và g i t p tin gi a hai ng i ho c m t nhóm ng i Có
ch c n ng qu n lý t xa dành riêng cho ng i qu n tr qu n lý toàn b h th ng
Trang 6Ph n m m xây d ng theo mô hình Client/Server
Yêu c u h th ng: do có truy n âm thanh và hình nh nên c n thi t ph i có microphone và WebCam
Trang 7̇ Trong quá trình h p, roomleader có th thêm thành viên
̇ Ng i s d ng có th r i cu c h p trong khi đang h p
ch n đ i tho i không đ ng nh p, ho c đang đ i tho i v i ng i khác
̇ Khi b t đ u, đ i tho i m c đ nh là g i tin nh n, ng i s d ng có th dùng microphone ho c WebCam
̇ Trong quá trình h p ng i s d ng có th g i t p tin
1-1 0-N
Password UserName Depart ment UserPosit ion
St atus id: UserID
USER
BeginPoint EndP oint ROOM-USER
RoomID RoomName
T o pic
St art Point Deadline BeginPoint EndP oint id: RoomID ROOM
Conv erID BeginPoint EndP oint Voice Webcam id: Conv erID CONVERSAT ION 1-1
S đ 1
2.1.2 Mô t các th c th
̇ Th c th User
Department VarChar Phòng ban làm vi c UserPosition VarChar V trí công vi c
Trang 8Status Char Tr ng thái hi n hành
Topic VarChar N i dung tiêu đ c a cu c h p
StartPoint DateTime Th i gian có th m cu c h p
Deadline DateTime H n chót đ m cu c h p
BeginPoint DateTime Th i gian b t đ u m cu c h p
EndPoint DateTime Th i gian k t thúc cu c h p
BeginPoint Date Th i gian b t đ u cu c đàm lu n
EndPoint Date Th i gian kêt thúc cu c đàm lu n
Voice Boolean Tr ng thái có chat voice hay không Webcam Boolean Tr ng thái dùng webcam hay không
B ng 3
L u ý
Trang 9Các thông tin qu n lí tr ng thái đ i tho i hi n hành t ng t nh qu n lí trong cu c h p
đã đ c nêu trên
Voice và Webcam dùng đ l u thông tin có hay không s d ng các tín hi u âm thanh
và hình nh đ truy n
Cu c đ i tho i khi đ c m s ch có th i gian BeginPoint l u th i gian b t đ u Khi
cu c đ i tho i k t thúc thì EndPoint m i đ c gán vào đ l u th i đi m k t thúc
̇ Th c th Room-User
BeginPoint Date Th i gian b t đ u tham gia cu c h p EndPoint Date Th i gian thoát kh i cu c h p
Trang 10UserPosition VarChar 50 V trí công vi c
Status Char 1 Tr ng thái hi n hành
StartPoint DateTime - Th i gian có th m cu c h p
Khoá ngo i tham chi u b ng User
Voice Boolean - Tr ng thái có truy n âm thanh
Pham The BaoDigitally signed by Pham The BaoDN: CN = Pham The Bao, C = VN
Reason: I am the author of this document
Date: 2006.08.03 15:48:42 +07'00'
Trang 11b Ki m tra các thông tin b t bu c (g i thông báo n u thông tin không h p l )
c L u các thông tin này vào c s d li u
b Ti p nh n thông tin thay đ i, đ m b o các thông tin b t bu c (ki m tra các tr ng
b t bu c, g i thông báo n u thông tin không h p l )
̇ L y thông tin ng i c n thêm, b o đ m các thông tin b t bu c,
̇ L u thông tin trong CSDL
Trang 12X lý các thao tác liên quan t i cu c h p bao g m m , đóng, đ ng nh p, thoát kh i
cu c h p; x lý truy n nh n hình nh, âm thanh; thêm b t ng i dùng trong cu c h p Toàn b các ch c n ng đ u do máy ch x lý khi nh n yêu c u t ng ng t máy tr m (có th t ng i dùng bình th ng hay t roomleader)
̇ X lý đ ng nh p cu c h p, ki m tra quy n c a ng i dùng vi c ki m tra này đ c
− Ng i dùng: ki m tra tr ng thái hi n hành c a cu c h p
a Order (cu c h p đã đ c t o và ch a m ) Thông báo cho ng i dùng bi t cu c h p ch a đ c m , quy n truy c p b
t ch i
a Meeting (cu c h p đang đ c h p)
M k t n i cho ng i dùng, c p nh t l i tr ng thái hi n hành cho ng i dùng
C p nh t l i b ng ROOM_USER trong c s d li u
G i thông báo đ n t t c ng i dùng trong cu c h p
b Finished (cu c h p đã k t thúc) Thông báo ng i dùng bi t cu c h p đã k t thúc, quy n truy c p b t ch i
− Nh ng ng i khác Thông báo quy n truy c p b t ch i vì ng i dùng không có quy n đ i v i cu c
h p
̇ X lý thoát kh i cu c h p
− Ch c n ng này ch đ c th c hi n v i các ng i dùng không là roomleader
(quy n này đã đ c ki m t i máy tr m)
− Thông báo cho roomleader
− Ng t k t n i c a ng i dùng C p nh t tr ng thái hi n hành c a ng i dùng
− C p nh t l i b ng ROOM_USER
Trang 13̇ X lý truy n nh n các tín hi u âm thanh, hình nh
− M i máy s nh n đ c tín hi u âm thanh, hình nh t thi t b , chuy n đ nh d ng
d li u, r i truy n lên máy ch
− Máy ch nh n đ c d li u t máy tr m, truy n cho t t c nh ng ng i dùng đang có trong cu c h p
− Ng i dùng nh n đ c d li u, gi i nén và hi n th d li u ra
̇ X lý thêm ng i dùng khi đang h p
Ch c n ng ch đ c th c hi n d i quy n ng i qu n lý khi cu c h p đang đ c
h p Các b c ti n hành
Ki m tra tr ng thái ng i dùng đ c thêm vào
− Online (đang tr c tuy n):
- Thông báo và ch câu tr l i t phía ng i dùng đ c m i
- N u ng i dùng đ ng ý tham gia cu c h p, c p nh t l i tr ng thái hi n hành cho ng i dùng, c p nh t l i bang ROOM_USER Chuy n sang ph n x lý gia
nh p cu c h p cho ng i dùng v a thêm
- Ng c l i thông báo cho ng i qu n lý ng i dùng không đ ng ý
− Chat ( ang trong cu c đ i tho i):
- Thông báo l i m i cho ng i dùng
- N u đ c đ ng ý: x lý k t thúc cu c đ i tho i
- C p nh t l i tr ng thái hi n hành c a ng i dùng trong c s d li u (cho phép quy n đ ng nh p cho ng i dùng đ c m i vào cu c h p)
- X lý gia nh p cu c h p v i quy n ng i dùng cho ng i v a đ c m i
− JoinRoom( ang trong cu c h p) hay Offline (không tr c tuy n):
- Thông báo cho roomleader bi t ng i dùng không s n sàng
Ta g i user1 là ng i kh i t o đ i tho i, user2 là ng i nh n đ c l i m i:
- User1 g i l nh kh i t o đ i tho i kèm v i ng i dùng đ n máy ch
- Máy ch ki m tra tr ng thái c a user2: n u là “Online”, g i thông báo đ n
ng i dùng ch s ch p thu n N u không “Online” g i thông báo không t o
đ c đ i tho i tr v cho user1
- N u user2 không ch p nh n: g i thông báo không t o đ c đ i tho i cho user1
- N u user2 ch p nh n: user2 g i s c ng mà nó s nh n âm thanh và hình nh, user2 m k t n i ch , đ ng th i b t đ u ch các tín hi u âm thanh và hình nh t
Trang 14- Máy ch g i l i cho user1 các thông tin v a nêu cùng IP c a user2
- User1 nh n đ c các thông tin c n thi t, nó s t o k t n i đ n user2, m k t n i
ch các tín hi u âm thanh và hình nh, cu i cùng là b t đ u cu c đ i tho i
̇ X lý truy n và nh n âm thanh, hình nh
Khi có tín hi u mu n s d ng âm thanh hay hình nh:
- H th ng s ki m tra thi t b , thông báo l i n u không tìm d c thi t b thích h p
- G i thông báo lên máy ch ,
- Nh n tín hi u t thi t b , chuy n đ nh d ng thích h p, r i truy n d li u cho ng i dùng còn l i
Ng i dùng khi nh n đ c tín hi u, chuy n đ nh d ng thích h p đ trình di n d
li u
Máy ch nh n đ c thông báo, c p nh t c s d li u
̇ K t thúc đ i tho i
Khi m t trong hai ng i k t thúc, cu c đ i tho i s đ c k t thúc
- G i thông báo lên máy ch
- G i thông báo cho ng i dùng còn l i
- K t thúc vi c truy n âm thanh/hình nh (n u còn)
- óng các k t n i
Ng i dùng còn l i khi nh n đ c thông báo k t thúc đ i tho i, đóng các k t n i
đ n ng i dùng kia i tho i k t thúc
Trang 15Ch ng 2
K THU T VÀ CÔNG NGH
1 T ng quan
1.1 Khái ni m c b n
Vi c truy n d li u thông qua môi tr ng m ng g p m t khó kh n r t l n v b ng
thông và t c đ đ ng truy n, đ c bi t là đ i v i các d li u nh âm thanh và hình nh
Nh ng d li u liên t c này đòi h i cao v đ ng truy n đ đ m b o cho nó đ c truy n
m t cách hi u qu (không b gián đo n, ng t quãng, hay m t thông tin) Do đó vi c nén các
tính hi u âm thanh, hình nh tr c khi chúng đ c truy n lên m ng là m t yêu c u h t s c
c n thi t c cho vi c ti t ki m đ ng truy n c ng nh đ m b o ch t l ng c a vi c truy n
Các thu t toán c a nén không m t d li u th ng d a vào vi c thay th m t nhóm các
ký t trùng l p b i m t nhóm các ký t đ c bi t khác ng n h n mà không quan tâm t i ý
ngh a c a dòng bit d li u
Các ví d c a d ng nén không m t d li u là Run-Length Encoding (RLE), Huffman
Coding, Arithmetic coding, Shannon-Fano Coding,
1.1.2 Nén m t d li u
Nén m t d li u (lossy data compression) [3] là m t ph ng pháp nén mà sau khi nén
ho c gi i nén, d li u ta nh n đ c s khác v i d li u ban đ u Tuy nhiên, d li u này có
th s d ng t t trong các tr ng h p thích h p Ki u nén này thông th ng đ c s d ng
trên m ng Internet và đ c bi t trong quá trình truy n t i d li u âm thanh, hình nh Ki u
nén này t ng ph n v i nén không m t d li u Ph thu c vào đ nh d ng c a d li u mà
ph ng pháp nén này mà d li u khi ph c h i s b m t khác nhau, vì v y khi nén và gi i
nén càng nhi u l n s càng gây ra nhi u h h i v d li u Các ph ng pháp nén nh có
m t tín hi u g m có 4 b c, hình 1
Trang 16Có nhi u gi i thu t đ c đ t ra đ đáp ng yêu c u gi m thi u kích th c c a t p tin
nh sao cho v n duy trì đ c ch t l ng m c đ ch p nh n đ c Nh ng gi i thu t này
đ u d a trên n n t ng là lo i b t nh ng màu mà m t ng i không ho c khó c m nh n
đ c, ch gi l i nh ng màu ch y u th c s nh h ng tích c c lên kh n ng c m nh n màu c a m t
i v i âm thanh, có nhi u chu n nén khác nhau nh : Windows Media, MP3(MPEG-1 Audio Layer-3) , Real G2, Liquid Audio, nh ng thông d ng nh t hi n nay là MP3 Nén theo chu n MP3, kích th c t p tin âm thanh có th đ c thu nh đi tám l n so v i kích th c ban đ u làm đ c nh v y, ng i ta s d ng m t k thu t g i là l y m u âm, th nghi m r i b b t nh ng âm đi u mà tai ng i không nghe đ c ho c kém nh y Do đó,
ch t l ng âm c a MP3 r t khó phân bi t v i âm c a đ a CD (Compact disc chu n) [4]
1.1.3 So sánh gi a hai ki u nén
Ph ng pháp nén m t d li u có ích h n nén không m t d li u m t vài đi m: ki u nén m t d li u s cho ra các t p tin nén có kích th c nh h n r t nhi u so v i b t c ki u nén không m t d li u nào
Các ph ng pháp nén m t d li u th ng đ c dùng cho nén âm thanh, hình nh ho c các đo n video Do d li u âm thanh có m t s âm v c tai ng i không nghe đ c và khi
b m t m t s d li u thì ta v n không phân bi t đ c gi a d li u đã b m t và d li u
ch a b m t i v i hình nh, lý do c ng t ng t
T s nén (t s gi a kích th c c a t p tin nén và t p tin ch a nén) c a ki u nén m t d
li u cho video thì cao h n so v i nén cho âm thanh Âm thanh có th đ c nén t i t l 10:1
và ch t l ng không kém h n bao nhiêu, video khi đ c nén v i t l m t mát không đáng
1.1.4 M t s khái ni m c b n trong vi c thu nh n, truy n và trình di n d li u âm thanh, hình nh
̇ Time-base Media (tín hi u đa truy n thông liên t c):
Trang 17M t đ c đi m chính c a tín hi u đa truy n thông liên t c là yêu c u vi c phát và
x lí m t cách đ ng th i [1] M t khi b t đ u truy n m t lu ng tín hi u, c n đ t
đ c s gi i h n nghiêm kh c v th i gian trong c vi c nh n và hi n th d li u Vì
v y, tín hi u đa truy n thông liên t c - đ c xem là streaming media- ph i đ c
phát trên m t đ ng truy n n đ nh, cung c p kh n ng truy n và nh n trong m t khung th i gian nh t đ nh đ cho ra k t qu ch p nh n đ c Ví d , khi m t đo n phim đ c chi u, n u d li u không đ c phát đ nhanh, có th s xu t hi n các kho ng d ng ngoài ý mu n M c khác, n u d li u không đ c nh n và x lí m t cách nhanh chóng, thì đo n phim s xu t hi n nh ng đo n nh y do m t d li u hay
đo n nh b b qua do mu n đ t đ c t c đ hi n th v n có
̇ Content Type:
Là đ nh d ng mà d li u media (âm thanh và hình nh) đu c l u tr các d ng
Quicktime, MPEG (Motion Pictures Experts Group) hay WAV(Waveform Audio) Content type v b n ch t t ng t nh đ nh d ng t p tin nh ng ng i ta dung
thu t ng content type vì d li u media ch y u thu đ c t các ngu n tài
nguyên h n là t các t p tin c c b
̇ Media Stream:
Media stream là m t dòng d li u media thu đ c t m t t p tin c c b , t
m ng hay thu nh n đ c t camera ho c microphone Media stream th ng
bao g m nhi u kênh d li u đ c g i là các track Ví d nh m t t p tin d ng Quicktime có th bao g m các track âm thanh và track hình nh Các media stream ch a nhi u track th ng đ c g i là multiplexed hay complex
- Demultiplexing là quá trình tách các track riêng r ra kh i các lu ng
media ch a nhi u track
- D ng track đ c đ nh ngh a là lo i d li u mà nó ch a, nh là hình nh ho c
âm thanh nh d ng c a track cho bi t cách mà d li u c a track đ c xây d ng
- M t media stream đ c xác đ nh nh đ a ch và giao th c truy c p nó
Ch ng h n nh ng i ta dùng đ a ch URL(Uniform Resource Locator) đ xác đ nh
v trí c a t p tin Quicktime trên h th ng t xa hay c c b N u t p tin máy c c
b thì nó có th đ c truy c p b ng giao th c FILE Ng c l i n u nó n m máy ch web thì có th truy c p đ c b ng giao th c HTTP(Hyper Text Transfer Protocol)
M t media locator đ c dùng thay th cho URL khi đ a ch d ng URL không
X Push : máy ch s kh i đ ng d li u truy n và đi u khi n dòng d li u Ví
d nh RTP(Real-time Transport Protocol) là giao th c Push đ c s d ng
đ truy n thông media
̇ Trình di n các d li u media:
Trang 18H u h t các d li u media đ c trình di n qua các thi t b nh loa hay màn
hình Ngoài ra, các lu ng d li u media có th đ c l u vào t p tin ho c truy n qua
m ng Các cách th c trình di n cho media đ c đ i di n nh m t data sink
̇ X lý d li u trình di n:
Trong h u h t tr ng h p, d li u trong lu ng media đ c x lí tr c khi bi u
di n cho ng i dùng Thông th ng, vi c x lí th c hi n nh sau:
X N u lu ng là đa thành ph n, thì c n ph i tách ra thành t ng track riêng
X N u các track này b nén thì ph i gi i nén ra
X N u c n thi t, m i track s đ c chuy n sang các đ nh d ng khác nhau
X Thu nh n t ng track âm thanh và hình nh
X Có th g n nh ng track này vào các b l c
X Các track này s đ c mã hóa
X Nh ng track sau khi nén s đ c k t h p và đ a vào m t lu ng media riêng
X Lu ng đa thành ph n này s l u xu ng t p tin
̇ B nén d li u (codecs) :
- Codec có nhi m v nén và gi i nén d li u media Khi m t track đ c mã
hóa, nó s chuy n sang d ng nén thích h p đ l u tr ho c truy n đi, khi gi i nén
nó s đ c chuy n sang d ng đ nh d ng không nén thích h p cho vi c bi u di n d
Renderer là thi t b trình di n d li u i v i âm thanh, thi t b trình di n là
lo i audio card mà có th phát ra âm thanh còn v i hình nh là màn hình máy tính
̇ Thu nh n các d li u media (Media Capture):
- D li u truy n thông đa liên t c có th đ c thu nh n t các thi t b bên ngoài
đ trình di n ho c thu l i Ví d nh âm thanh có th đ c thu nh n t microphone, video có th đ c thu nh n t m t camera
- M t thi t b có th thu nh n đ c nhi u lu ng d li u cùng lúc Ví d nh m t camera có th thu nh n đ c c âm thanh l n hình nh Các lu ng này đ c thu
nh n và đ c đi u khi n đ c l p ho c có th k t h p chúng thành m t
1.2 Gi i thi u JMF
Java Media Framework (JMF) là m t th vi n đ c vi t b ng ngôn ng Java c a hãng Sun, JMF cho phép các d li u nh âm thanh, hình nh hay các tín hi u đa truy n
Trang 19có th thu nh n, trình di n, truy n d li u âm thanh và hình nh, ngoài ra JMF còn h tr chuy n mã gi a nhi u đ nh d ng d li u khác nhau
JMF cung c p m t giao th c truy n thông và m t ki n trúc th ng nh t đ qu n lý, x lý
và phân phát các tín hi u media liên t c JMF đ c thi t k thích h p v i h u h t các d ng
media chu n nh : AIFF (Audio Interchange File Format), AVI (Audio-Video Interleave),GSM (Global System for Mobile Communication), MIDI (Musical Instrument Digital Interface), MPEG, QuickTime và WAV,…
D a trên n n Java, JMF duy trì đ c kh n ng “vi t m t l n, ch y kh p n i” cho nh ng
nhà phát tri n mu n tích h p các tín hi u media nh âm thanh hình nh vào ng d ng Java
c a mình S b sung c a JMF có th n ng cao kh n ng c a các h đi u hành c s , trong khi ng i l p trình có th d dàng t o các ch ng trình Java v i các c ng giao ti p có th truy n t i đ c các tín hi u media liên t c b ng cách s d ng các hàm API(Application Program Interface) c a JMF
V i JMF, b n có th d dàng t o các ch ng trình ng d ng đ trình di n, thu gi , x
lý hay l u tr các tín hi u media liên t c JMF cho phép ng i l p trình có th t thêm vào
các x lý cho các d li u media thô, m r ng JMF đ h tr cho các content type và
đ nh d ng m i, t i u hóa vi c đi u khi n các đ nh d ng cung c p s n, và t o m t c ch trình di n m i
JMF c ng s d ng m t mô hình t ng t M t data source gi d li u c a dòng
tín hi u media nh m t cu n b ng và m t player cung c p ch c n ng x lý và c ch
đi u khi n nh là đ u VCR Vi c hi n th và thu nh n tín hi u âm thanh, hình nh v i JMF đòi h i các thi t b đ u vào và ra thích h p ch ng h n nh microphone, camera, loa
và monitor
Trang 20Hình 3: Minh h a các b c thu nh n và trình di n d li u Datasource và player là nh ng ph n bên trong b API c p cao c a JMF dùng đ
qu n lý tín hi u thu nh n đ c, trình di n và x lý các tín hi u media liên t c JMF c ng cung c p m t b API c p th p cho vi c tích h p tín hi u media liên t c vào ng d ng Java
trong khi v n duy trì đ c s linh đ ng và kh n ng m r ng
Trang 21̇ Manager: n m gi các c u trúc Player, Processors, DataSource và DataSink
̇ PackageManager: gi registry c a gói th vi n ch a các l p c a JMF nh là
Players, Processors, DataSources, và DataSinks
̇ CaptureDeviceManager : gi registry c a các bi n thi t b b t tín hi u
̇ PlugInManager : gi registry c a các thành ph n x lý c a JMF nh
Renderers
vi t m t ch ng trình JMF, ta c n dùng ph ng th c create c a Manager đ xây d ng các Players, Processors, DataSources, và DataSinks N u b n
c n b t d li u media t thi t b , b n c n dùng đ n đ i t ngCaptureDeviceManager đ dò tìm thi t b thích h p và truy c p các thông tin c a chúng N u b n mu n n m đ c các x lý nào đang đ c ti n hành trên d li u media, dùng l p PlugInManager đ xác đ nh nh ng plug-in nào đã đ c đ ng kí
N u b n m r ng ch c n ng c a JMF b ng cách thi hành m t plug-in m i và đ ng
kí nó v i PlugInManager đ nó có hi u l c trong các API plug-in c a Processors
s d ng các Player, Processor, DataSource, hay DataSink t đ nh ngh a
ch c n đ ng kí nó v i PackageManager.
1.2.3 Các d ng c a d li u
JMF đ nh ngh a 2 d ng ngu n d li u đ c bi t : cloneable và merging
̇ D li u d ng cloneable có th đ c s d ng đ t o ra b n clone cho c pull và push datasource t o đ c d li u d ng cloneable g i ph ng th c
createCloneableDataSource c a Manager đ i v i DataSource c n
t o M t khi DataSource đã đ c x lý qua ph ng th c
createCloneableDataSource, ta ch nên thao tác trên b n clone m i đ c
t o
- D li u ngu n cloneable th c thi giao di n SourceCloneable v i ph ng
th c createClone B ng cách s d ng hàm createClone b n có th t o ra
nhi u b n clone t d li u mà đ c dùng đ t o ra d li u Cloneable Các b n clone
đó có th đ c qu n lý thông qua b n cloneable đ c dùng đ t o ra chúng Khi g i các hàm connect, disconnect, start, hay stop lên b n cloneable, ph ng
ph i có cùng đ nh d ng
Trang 221.2.4 nh d ng d li u
nh d ng d li u media đ c xác đ nh b i đ i t ng Format, hình 5 Ph n đ nh d ng này không mang thông tin tham s mã hóa c ng nh l ng th i gian, nó ch mang thông tin tên đ nh d ng mã hóa và d ng d li u thích h p v i ki u đ nh d ng đó
JMF m r ng đ i t ng Format đ xác đ nh t ng đ nh d ng âm thanh và hình nh riêng bi t
Hình 5: C u trúc các l p Format
i t ng AudioFormat gi các đ c tính riêng bi t cho các đ nh d ng âm thanh nh rate, s kênh v.v… i t ng VideoFormat gi các thông tin v d li u hình nh M t vài đ i t ng Format đ c h tr b i VideoFormat đ di n t các tính ch t c a các
1.2.5 Các b đi u khi n chu n
JMF cung c p các đi u khi n chu n :
Trang 23Hình 6: C u trúc các Control
M t s Control chính, hình 6:
CachingControl cho phép hi n th ti n trình download N u m t Player hay Processor mu n t ng thu t đ c ti n trình download, nó ph i th c thi giao ti p này GainControl cung c p kh n ng hi u ch nh m c đ âm thanh nh l n, nh , ho c
ng t tín hi u ra c a m t Player hay Processor Nó còn h tr c ch l ng nghe s thay đ i m c đ âm thanh
i t ng DataSink hay Multiplexer đ c d li u t m t DataSource và ghi
nó lên m t ngu n khác ch ng h n nh m t t p tin Hai đ i t ng này th c thi giao di n StreamWriterControl Control này cho phép ng i dùng gi i h n dung l ng c a dòng d li u đ c t o
M t TrackControl là m t d ng c a FormatControl, nó cung c p c ch ki m
soát ti n trình x lý c a Processor trên m t track c a d li u media V i ph ng th c TrackControl, ta có th xác đ nh rõ đ c nh ng chuy n bi n đ nh d ng trên nh ng track riêng l và ch n các plug-in Effect, Codec, hay Renderer đ s d ng trong Processor
Trang 24Vi c truy n media qua m ng đòi h i m ng ph i có b ng thông cao Vì d li u r t d b
m t nên kho ng th i gian trì hoãn đ nh n đ c d li u l n i u này r t khác v i vi c
nh n các d li u t nh qua t p tin – đòi h i t t c các d li u ph i đ n đ c đích Vì th , các giao th c dùng cho vi c truy n t p tin thì r t khó s d ng đ c cho vi c truy n tín hi u
media
HTTP và FTP là hai giao th c đ c d a trên TCP (Transmission Control Protocol) là
m t giao th c c a t ng transport đ c thi t k v i đ tin c y cao dùng cho m ng có b ng thông th p Theo giao th c này, khi m t d li u b m t ho c b th t l c, nó s ph i đ c truy n l i Do đó, UDP th ng đ c dùng cho vi c truy n các d li u media liên t c theo
th i gian th c
RTP - m t giao th c đ c đ nh ngh a b i t ch c IETF RFC 1889 - là giao th c đ c
đ nh ngh a riêng cho vi c truy n các d li u âm thanh và hình nh RTP th ng đ c dùng thông qua UDP
Hình 7: C u trúc RTP
RTP có th đ c dùng v i c d ch v m ng unicast và multicast i v i unicast nó s
g i m t b n sao d li u đ c l p t ngu n đ n đ a ch đích i v i multicast d li u t
ngu n s đ c g i ch m t l n và m ng s ch u trách nhi m truy n các d li u này đ n các
Là m t máy tr m, máy ch hay m t ng i s d ng tham gia trong session i
t ng tham gia trong m t session có th g m có ng i nh n, ng i g i, ho c c hai
M i lo i d li u media đ c truy n trong m t session khác nhau Ví d nh n u
c tín hi u âm thanh và hình nh cùng đ c truy n, m t session s truy n audio, m t
Trang 25session khác s truy n video i u này giúp cho participant có th ch n l a lo i
d li u h mu n nh n
DataPackets
D li u media đ c truy n đi b ng m t lo t các gói Các gói này đ c b t đ u t
m t ngu n đ c g i là RTPStream M i gói d li u RTP bao g m hai ph n : ph n
header và ph n d li u th c
Hình 8: nh d ng c a RTP data-packet header
RTCP (RTP Control Protocol) Các gói d li u đi u khi n
Ngoài các d li u đ c g i trong m t session, các RTCP c ng đ c g i m t cách
đ nh k cho t t c participant trong m t session Các gói này ch a thông tin v
ch t l ng c a d ch v , ngu n d li u đ c truy n trên c ng d li u, và các th ng kê v
Các participant s g i đ nh k m t b n báo cáo nh n cho t t c các máy
M t b n báo cáo nh n ch a thông tin v s gói d li u b m t, s th t l n nh t c a các gói d li u đã nh n đ c, m t timestamp dùng đ c tính kho ng th i gian trì hoãn gi a ng i g i và ng i nh n
Gói RTCP đ u tiên trong packet ghép ph i là m t b ng t ng thu t, th m chí n u không có d li u nào đ c g i thì m t b n t ng thu t r ng s đ c g i
T t c các packet RTCP ghép ph i có m t source description (SDES) đ nh n
d ng ngu n d li u, đ a ch email, tên ng d ng, ho c m t thông đi p đ mô t tr ng
thái hi n th i c a ngu n d li u
Khi ngu n d li u không ho t đ ng, nó g i m t gói RTCP BYE Gói này có th
đ a ra lý do vì sao ngu n d li u r i b phiên truy n nh n
Bit 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 16 7 8 9 0 1 2 3 4 5 6 7 8 9 0 31
Timestamp Synchronization Source (SSRC) Content Source (CSRC)
(0-15)
Trang 262.2 Truy n d li u v i RTP
JMF cho phép vi c hi n th và truy n lu ng d li u RTP thông qua API đ c đ nh ngh a trong gói javax.media.rtp, javax.media.rtp.event, và javax media.rtp.rtcp
n gi n, ta có th dùng RTP API đ truy n, thu nh n, ho c ch a lu ng d li u media
trên m ng Lu ng RTP đ c truy n qua m ng có th l y t m t t p tin h c m t thi t b
Lu ng này sau khi đ c nh n v có th đ c hi n th , l u tr ho c c hai
Quá trình truy n d li u v i RTP đ c chia thành hai giai đo n:
T p tin
Trang 27Hình 11: Mô hình thu nh n d li u
M i lu ng nh n đ c t SessionManager s đ c trình di n b ng m t Player khác nhau Ta có th t o m t Player cho m t RTP stream thông qua ph ng th c createPlayer c a Manager B n có th :
̇ S d ng MediaLocator đ t o m t Player b ng cách g i Manager createPlayer(MediaLocator)
̇ T o m t Player cho t ng ReceiveStream b ng cách l y DataSource t
lu ng và gán nó vào Manager.createPlayer (DataSource)
N u s d ng MediaLocator đ t o Player, ta ch có th trình di n đ c lu ng RTP đ u tiên đ n session N u ta mu n trình di n nhi u lu ng RTP trong m t session, ta
c n s d ng tr c ti p SessionManager và kh i t o Player cho m i ReceiveStream
T o Player cho m t RTP Session
Khi s d ng MediaLocator đ t o Player cho m t RTP session, Manager s
t o m t Player cho lu ng đ u tiên vào session Player này sinh ra s ki n
RealizeCompleteEvent khi d li u đ n session
m t RealizedPlayer s khóa vô th i h n các ho t đ ng khác
Ví d 1: t o m t Player cho m t RTP session
String url= "rtp://224.144.251.104:49150/audio/1";
MediaLocator mrl= new MediaLocator(url);
Player player = Manager.createPlayer(mrl);
public synchronized void controllerUpdate(ControllerEvent e) {
if(e instanceof RealizeCompleteEvent) {
Trang 28T o m t RTP Player cho m i ReceiveStream m i
trình di n t t c các ReceiveStream trong session, b n c n t o m t Player
riêng cho m i lu ng Khi m t lu ng m i đ c t o, SessionManager s sinh ra s ki n NewReceiveStreamEvent Thông th ng, b n nên đ ng kí m t ReceiveStream Listener và t o m t Player cho m i ReceiveStream m i t o Player, b n
l y DataSource t ReceiveStream và gán vào Manager.createPlayer
t o m t Player cho m i ReceiveStream m i trong session ta ph i:
̇ Thi t l p m t RTP session:
- T o m t SessionManager Ví d , t o m t com.sun.media rtp.RTPSessionMgr
̇ L y RTP DataSource t ReceiveStream b ng cách g i getDataSource
ây là m t PushBufferDataSource v i m t đ nh d ng riêng c a RTP
DataSource dsource = stream.getDataSource();
̇ Gán DataSource cho Manager.createPlayer đ t o Player i v i Player đ c t o thành công, thì c n ph i có m t plug-in phù h p cho vi c gi i mã
d li u đã chuy n theo đ nh d ng RTP
newplayer = Manager.createPlayer(dsource);
2.2.2 Truy n d li u v i RTP
truy n m t lu ng RTP, s d ng m t Processor đ t o ra DataSource đ c
mã hóa theo chu n RTP và xây d ng SessionManager ho c DataSink đ ki m soát vi c truy n tín hi u
D li u vào c a DataSource có th là d li u đã đ c l u tr (t p tin) hay d li u
tr c ti p l y đ c t m t thi t b i v i d li u đ c l u tr , s d ng m t MediaLocator đ xác đ nh t p tin khi t o Processor i v i d li u l y đ c t
Trang 29thi t b , d li u thu đ c s làm d li u nh p cho Processor, nh đã trình bày trong
ki m soát quá trình truy n thông
N u dùng MediaLocator đ xây d ng RTP DataSink, ta ch có th truy n
đ c lu ng đ u tiên trong DataSource N u mu n truy n đ ng th i nhi u lu ng trong
m t phiên RTP và hi n th thông s th ng kê phiên, c n s d ng tr c ti p đ i t ng SessionManager
B t k cách mà ta dùng đ truy n lu ng d li u RTP, ta đ u ph i làm :
̇ T o m t Processor v i DataSource đ i di n cho d li u c n truy n
̇ Thi t l p Processor đ xu t ra d li u theo đ nh d ng RTP
̇ L y d li u xu t t Processor nh là DataSource
Thi t l p Processor
thi t l p đ c Processor cho vi c xu t d li u theo đ nh d ng RTP, ta thi t l p
đ nh d ng RTP cho các t ng track và ch đ nh chu i đ nh d ng d li u xu t
Các đ nh d ng track đ c thi t l p thông qua TrackControl c a t ng track và
ph ng th c setFormat đ ch đ nh đ nh d ng RTP M t đ nh d ng RTP đ c ch đ nh
b ng cách dùng chu i đ nh d ng t ng ng c a t ng lo i đ nh d ng, ví d nh
“AudioFormat.GSM_RTP” Processor s t đ ng t i nh ng plug-in c n thi t cho đ nh
d ng ta dùng N u không tìm th y plug-in thích h p s phát sinh ra l i
UnSupportedFormatException
nh d ng d li u xu t đ c thi t l p thông qua ph ng th c setOutputContentDescriptor N u không đòi h i d li u đa lu ng đ c bi t nào, chu i đ nh d ng d li u xu t s đ c gán "ContentDescriptor.RAW" Các lu ng d
li u âm thanh và hình nh không th đ c chen vào N u các track c a Processor thu c các đ nh d ng media khác nhau, m i lu ng đó s đ c truy n trong các phiên RTP riêng r
L y d li u xu t c a Processor
Khi đ nh d ng c a m t track c a Processor đã đ c thi t l p và Processor đã
đ c nh n, ta có th t o ra DataSource dùng đ xu t cho Processor Ta có th nh n d
li u xu t ra c a Processor d i d ng DataSource b ng ph ng th c getDataOutput D li u tr v có th là PushBufferDataSource ho c PullBufferDataSource, tu thu c vào ngu n c a d li u
D li u xu t đ c n i v i SessionManager qua ph ng th c createSendStream i t ng SessionManager ph i đ c kh i t o tr c khi t o
lu ng g i d li u
N u DataSource ch a nhi u SourceStreams, m i SourceStreams s đ c
g i đi trên m t lu ng RTP riêng r trong cùng m t phiên hay trong nhi u phiên khác nhau
N u DataSource ch a nh ng lu ng âm thanh và hình nh, các phiên RTP riêng r ph i
đ c t o cho t ng dòng âm thanh và hình nh Ta c ng có th t o ra các b n sao c a
Trang 30DataSource và g i các b n sao này nh là các luông RTP riêng r trên cùng m t phiên hay trên các phiên khác nhau
T o m t createSendStream trên SessionManager v a m i xây d ng
và kh i t o v i tham s là DataSource và ch s lu ng B qu n lý phiên s
t o m t SendStream cho SourceStream ch đ nh
Kh i đ ng phiên b ng ph ng th c SessionManager.startSession
Ki m soát quá trình truy n thông b ng các ph ng th c c a đ i t ngSendStream M t SendStreamListener có th đ c đ ng kí đ l ng nghe các s ki n c a SendStream
T o lu ng g i d li u
Tr c khi b qu n lý phiên có th truy n d li u, nó c n đ c bi t n i mà d li u đ c
l y đ truy n đi Khi xây d ng m t SendStream, ta c n ch cho SessionManager
ph n DataSource mà nó s l y d li u Vì DataSource có th ch a nhi u lu ng, ta
c n ch rõ ch s c a lu ng ta c n truy n trong phiên này Ta có th t o ra nhi u SendStream khác nhau b ng createSendStream vói nhi u DataSource khác nhau hay v i các ch s lu ng khác nhau
B qu n lý phiên s truy v n đ nh d ng c a SourceStream đ xác đ nh xem d ng
payload c a đ nh d ng này đã đ c đ ng kí hay ch a N u đ nh d ng c a d li u không
ph i là đ nh d ng RTP ho c d ng payload không th xác đ nh đ c cho đ nh d ng RTP, h
th ng s phát sinh l i UnSupportedFormatException v i thông đi p t ng ng
Các payload đ ng có th đ c k t h p v i đ nh d ng RTP b ng ph ng th c SessionManager.addFormat
S d ng d li u ngu n d ng Clonable
R t nhi u k ch b n s d ng RTP bao g m vi c g i m t lu ng lên nhi u phiên RTP và
vi c chuy n mã m t lu ng d li u thành nhi u đ nh d ng và g i chúng lên nhi u phiên RTP Khi c n ph i g i m t lu ng đã đ c đ nh d ng lên nhi u phiên RTP, ta c n t o nhi u
b n clone cho DataSource l y đ c t b thu nh n d li u Processor i u này đ c
th c hi n b ng cách t o m t cloneable DataSource thông qua Manager b ng hàm
getClone M t Processor có th đ c t o ra t t ng cloneable DataSource, t các
track đ c đ nh d ng theo ki u mong mu n c a nó và t các lu ng d li u đ c g i t m t phiên RTP
S d ng d li u ngu n d ng Merging
N u mu n tr n các lu ng media c a cùng m t d ng (nh âm thanh) thành m t lu ng t
m t ngu n, ta c n s d ng m t RTP mixer N u các lu ng d li u có ngu n g c t
Trang 31nhi u DataSource, ta c n t o các MergingDataSource t các DataSource và dùng SessionManager đ t o lu ng d li u
Ki m soát lu ng g i d li u
S d ng các ph ng th c RTPStream start và stop đ ki m soát m t SendStream b t đ u truy n d li u thì m i SendStream c n ph i đ c b t đ u
Vi c b t đ u và k t thúc m t SendStream c ng gây tác đ ng lên DataSource
c a nó Tuy nhiên, n u DataSource đ c kh i đ ng đ c l p trong khi SendStream đang d ng d li u s b m t (PushBufferDataSource) hay không đ c kéo (PullBuffer DataSource) b i b qu n lý phiên Trong kho ng th i gian này, không có lu ng d li u nào đ c truy n trên m ng
Ví d 3: nh n tín hi u âm thanh mono và g i nó lên m t phiên RTP
AudioFormat format = new AudioFormat(AudioFormat.ULAW,
//lúc này, vi c t o processor đã thành công
// Realize processer và khóa đ n khi nó đ c configure processor.configure();
boolean encodingOk = false;
// Duy n và ch nh các đ nh d ng các track sang d ng ULAW_RTP
for (int i = 0; i < track.length; i++) {
Trang 32// block until realized
// get the output datasource of the processor and exit
Trang 33• Xác đ nh v trí c a thi t b b ng đ i t ng CaptureDeviceManager
• T o đ i t ng CaptureDeviceInfo cho thi t b
• L y đ i t ng MediaLocator t đ i t ng CaptureDeviceInfo c a thi t b và dùng nó đ t o DataSource
• T o Player hay Processor t DataSource
• Kh i đ ng Player hay Processor và b t đ u ti n trình thu d li u
N u s d ng Player ta ch có th phát l i d li u media, còn đ x lý hay l u tr thì
ph i dùng Processor.
2.3.1.1 Truy c p thi t b thu nh n tín hi u
Ta truy c p đ n các thi t b thu nh n tín hi u b ng CaptureDeviceManager
CaptureDeviceManager là registry ch y u cho t t c các thi t b đ c JMF nh n
d ng Ta có th li t kê các thi t b nh n đ c b ng ph ng th c CaptureDeviceManager getDeviceList
M i thi t b đ c đ i di n b i m t đ i t ng CaptureDeviceInfo l y
đ c CaptureDeviceInfo cho m t thi t b , ta g i ph ng th c getDevice c a
đ i t ng CaptureDeviceManager:
CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("deviceName");
2.3.1.2 Thu nh n d li u media
l y đ c d li u media t m t thi t b , c n l y đ c đ i t ng
MediaLocator c a thi t b t đ i t ng CaptureDeviceInfo c a nó Ta c ng
có th ho c dùng MediaLocator đ t o ra m t Player hay Processor, ho c dùng MediaLocator đ t o ra m t DataSource nh là đ u vào cho Player hay Processor
kh i đ ng ti n trình thu tín hi u g i ph ng th c start c a Player hay Processor
2.3.1.3 Cho phép ng i dùng ki m soát ti n trình thu nh n tín hi u
M i thi t b đ u có các thu c tính đi u khi n rõ ràng cho phép ki m soát thi t b Hai đ i t ng đi u khi n PortControl và MonitorControl đ c đ nh ngh a đ
ki m soát thi t b khi l p trình Ta có th truy c p các đi u khi n này b ng getControl c a DataSource l y đ c v i tên thi t b t ng ng
i u khi n PortControl cho phép ch n c ng dùng đ nh n d li u, còn MonitorControl cung c p ph ng ti n đ quan sát thi t b
Gi ng v i các đ i t ng Control khác, n u có các thành ph n tr c quan giao ti p
đ c v i đi u khi n PortControl hay MonitorControl, ta có th l y nó b ng
ph ng th c getControlComponent Vi c thêm các thành ph n đó vào applet hay
các ng d ng window có th giúp ng i dùng giao tác v i đi u khi n thu nh n d li u
Trang 34Ví d 4: Hi n th giao di n cho processor:
Component controlPanel, visualComponent;
if ((controlPanel = p.getControlPanelComponent()) != null) add(controlPanel);
if ((visualComponent = p.getVisualComponent()) != null) add(visualComponent);
2.3.1.4 Thu và phát d li u media tr c tí p
thu nh n tr c ti p đ c d li u t microphone và hi n th nó, ta c n :
• L y đ i t ng CaptureDeviceInfo c a microphone
• T o m t Player s d ng MediaLocator có đ c t đ i t ng CaptureDeviceInfo (Ta có th t o Player b ng cách g i createPlayer(MediaLocator) hay t o m t DataSource v i MediaLocator và s d ng createPlayer(DataSource) đ t o ra
Player.)
Ví d 5: Nh n và hi n th d li u âm thanh t m t microphone
// L y đ i t ng CaptureDeviceInfo // cho thi t b thu nh n âm thanh Vector deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat("linear", 44100, 16,
if (deviceList.size() > 0)
di = (CaptureDeviceInfo)deviceList.firstElement();
else // Thoát kh i ch ng trình n u không tìm đ c // thi t b đúng yêu c u
System.exit(-1);
// T o Player cho thi t b try{
Player p = Manager.createPlayer(di.getLocator());
} catch (IOException e) {
} catch (NoPlayerException e) {}
2.3.1.5 Ghi d li u âm thanh xu ng t p tin
B n có th ghi d li u media ra file b ng DataSink nh n và l u tr d li u ta
c n
• T o m t đ i t ng CaptureDeviceInfo cho thiêt b
• T o m t Processor s d ng MediaLocator l y đ c t đ i t ng CaptureDeviceInfo
• L y d li u ra DataSource t Processor
• T o m t MediaLocator cho file c n l u tr d li u
• T o m t DataSink s d ng d li u ra DataSource
• Kh i đ ng DataSink và Processor
Trang 35Ví d 6: Ghi d li u âm thanh xu ng t p tin v i DataSink
try {
p = Manager.createProcessor(di.getLocator());
sh = new StateHelper(p);
} catch (IOException e) { System.exit(-1);
} catch (NoProcessorException e) { System.exit(-1);
} // C u hình Processor
if (!sh.configure(10000)) System.exit(-1);
// Realize Processor và đ nh đ nh d ng cho d li u xu t
p.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.WAVE));
if (!sh.realize(10000)) System.exit(-1);
DataSource source = p.getDataOutput();
// T o m t MediaLocator đ n file ghi d li u
MediaLocator dest = new MediaLocator("file://foo.wav");
DataSink filewriter = null;
try { filewriter = Manager.createDataSink(source, dest);
filewriter.open();
} catch (NoDataSinkException e) { System.exit(-1);
} catch (IOException e) { System.exit(-1);
} catch (SecurityException e) { System.exit(-1);
} // Ch đ nh kích th c t i đa c a t p tin c n ghi d li u StreamWriterControl swc = (StreamWriterControl)
p.getControl("javax.media.control.StreamWriterControl"); // nh gi i h n là 5MB
if (swc != null) swc.setStreamSizeLimit(5000000);
// B t đ u ghi d li u try {
filewriter.start();
} catch (IOException e) { System.exit(-1);
Trang 36// L y d li u trong 5 giây sh.playToEndOfMedia(5000);
sh.close();
// Ch tín hi u EndOfStream t DataSink và đóng DataSink filewriter.close();
2.3.1.6 Chuy n mã d li u âm thanh nh n đ c
Ta có th c u hình m t Processor đ chuy n mã d li u media thu đ c tr c
khi hi n th , truy n đi hay l u tr chuy n mã d li u âm thanh sang đ nh d ng IMA4 tr c khi l u tr nó ta ti n hành :
• L y đ i t ng MediaLocator c a thi t b và xây d ng m t Processor
Ví d 7: Chuy n mã d li u âm thanh nh n đ c:
// C u hình Processor
if (!sh.configure(10000)) System.exit(-1);
p.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.WAVE));
// L y các TrackControls TrackControl track[] = p.getTrackControls();
boolean encodingPossible = false;
// Chuy n đ nh d ng d li u sang JPEG for (int i = 0; i < track.length; i++) { try {
track[i].setFormat(new AudioFormat(AudioFormat.JPEG));
encodingPossible = true;
} catch (Exception e) { // cannot convert to ima4 track[i].setEnabled(false);
} }
if (!encodingPossible) { sh.close();
System.exit(-1);
}
if (!sh.realize(10000)) System.exit(-1);
Trang 372.3.2 Các thành ph n trình di n d li u
Trong JMF, quá trình trình di n đ c mô hình b i giao giao ti p Controller Controller đ nh ngh a tr ng thái và b máy đi u khi n c b n cho m t đ i t ng đi u
khi n, hi n th , ho c thu nh n các lu ng time-based media
M t controller s chuy n các s ki n đ n m t b đi u khi n c th nh MediaEventsđ cung c p các thông báo v s thay đ i trang thái c a nó nh n các s
ki n t m t Controller nh Player, ta ph i th c thi giao ti p ControllerListener JMF API đ nh ngh a hai lo i Controllers: Player và Processor M t Player ho c Processorđ c kh i t o b ng m t datasource c th và th ng s không đ c s d ng
l i đ trình di n các d li u media khác
Hình 12: Các JMF Controller
2.3.2.1 Player
M t Player s x lý lu ng d li u media nh n vào và trình di n nó Player s
đ c nh n d li u t DataSource Tùy theo lo i d li u audio hay video s đ c trình
Trang 382.3.2.2 Các tr ng thái c a Player
M t Player s trong m t ho c sáu tr ng thái Giao ti p Clock đ nh ngh a hai
tr ng thái chính: Stopped và Started d dàng trong vi c đi u khi n, Controllerchia tr ng thái Stopped thành n m tr ng thái d phòng: Unrealized, Realizing, Realized, Prefetching, và Prefetched
Thông th ng, m t Player s ph i tr i qua các tr ng thái sau đ đ n đ c tr ng thái Started:
• Khi prefetchđ c g i, Player s chuy n tr ng thái c a nó sang tr ng thái Prefetching M t Prefetching Player s chu n b đ trình di n d li u media Trong su t giai đo n này, Player s t i l i d li u, và làm m i th đ chu n b trình
di n
• Khi Player hoàn thành tr ng thái Prefetcing, nó chuy n sang tr ng thái Prefetched ây là tr ng thái đ chu n b started
• G i startđ đ t Player vào tr ng thái Started
M t Player s g i m t TransitionEvents khi có d ch chuy n t tr ng thái này
đ n tr ng thái khác Giao ti p ControllerListener cung c p m t cách th c cho
đ nh lo i tr ng thái c a