|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
10-06-2014, 05:20 PM | #1 |
Guest
Trả Lời: n/a
|
Tìm hiểu kỹ thuật video streaming
Tìm hiểu kỹ thuật video streaming
1. Giới thiệu Streaming video là một kỹ thuật được sử dụng khá phổ biến trong các ứng dụng mạng. Rất nhiều các địa chỉ ứng dụng rộng rãi trong thực tế như: các phần mềm (media player, web browser, ...) trên các máy khách truy cập và xem video từ các máy chủ theo mô hình server/client; các ứng dụng hội họp trực tuyến, đào tạo từ xa; giám sát, điều khiển từ xa qua hình ảnh thời gian thực, v.v... Trong đó có nhiều ứng dụng sử dụng hệ thống nhúng triển khai kỹ thuật này. Bài viết này trình bày tóm tắt cơ bản về kỹ thuật streaming video, các giao thức cần thiết và giới thiệu một thư viện lập trình để triển khai kỹ thuật này. Từ đó phục vụ cho phần xây dựng một ứng dụng minh họa streaming video trên hệ nhúng KIT Linux FriendlyArm micro 2440.Streaming video sử dụng cách thức phát lại các đoạn video được lưu trữ trên các máy tính trên mạng tới người dùng đầu cuối muốn xem đoạn video mà không cần tải đoạn video đó về trên máy tính. Về bản chất, streaming video là quá trình chia nhỏ file video thành các frame, rồi lần lượt gửi từng frame tới một bộ đệm trên máy tính của người xem và hiển thị nội dung frame đó. Và quá trình này tuân thủ chặt chẽ về ràng buộc theo thời gian, nói khác là tuân thủ chặt chẽ theo giao thức RTSP, RTP và RTCP. Với đặc tính như vậy thì streaming video là kỹ thuật cũng khá phức tạp để triển khai. Nhưng với những lợi ích mà kỹ thuật streaming video đem lại, chúng ta hoàn toàn có thể triển khai được kỹ thuật này trên thực tế. 2. Kỹ thuật streaming video Các bước thực hiện kỹ thuật streaming video: - Phần mềm máy khách (media player, web browser, ...) cần kết nối được và xác định file video trên máy streaming server muốn xem. - Yêu cầu streaming file video đó sẽ được gửi tới streaming server để tìm file video đó. - Chương trình thực hiện streaming chạy trên máy streaming server sẽ chia file video thành các frame rồi gửi các frame đó tới máy yêu cầu sử dụng các giao thức ràng buộc về thời gian (RTSP, RTP, RTCP). - Khi các frame về máy khách, sẽ được lưu trữ trong vùng đệm và nội dung các frame sẽ được giải mã (decode) và hiển thị thông qua các chương trình chơi video (ví dụ VLC) Một số khái niệm được sử dụng trong streaming video: - Streaming video (luồng video) thực chất là quá trình truyền các frame của file video tới người nhận. - Demand streaming (stream theo yêu cầu) là quá trình streaming một file video có sẵn ( đã được lưu trên ổ cứng ) tới người nhận. - Live streaming (stream từ một nguồn tạo video) là quá trình streaming trực tiếp từ các frame video được tạo ra từ các thiết bị thu nhậnvideo (như camera ) tới người nhận. - H.264 , VP8 là các thuật toán mã hóa cho các luồng video. - Bitstream là khái niệm ám chỉ một luồng video từ máy chủ streaming tới máy khách nhận các frame video dựa vào giao thức MMS hayRTP. - Codec: thuật ngữ ám chỉ chung cho các thuật toán mã hóa đường truyền trong quá trình streaming audio hay video. - RTSP (Real Time Streaming Protocol) là giao thức mạng điều khiển quá trình streaming video hay streaming audio. - RTP (Real-time Transport Protocol ) là giao thức chuẩn định dạng cho gói tin (packet) video hay audio được truyền trên mạng. RTSP (Real Time Streaming Protocol) là một giao thức điều khiển trên mạng được thiết kế để sử dụng giao tiếp giữa máy client và máy streaming server. Giao thức này được sử dụng để thiết lập và điều khiển phiên giao dịch giữa các máy tính (end points). Về hình thức giao thức RTSP cũng có nét tương đồng với giao thức HTTP, RTSP định nghĩa một bộ các tín hiệu điều khiển tuần tự, phục vụ cho việc điều khiển quá trình playback. Trong khi giao thức HTTP là giao thức không có trạng thái thì RTSP là giao thức có xác định trạng thái. Một định danh được sử dụng khi cần thiết để theo dõi các phiên giao dịch hiện tại của quá trình streaming video gọi là số hiệu session. Cũng giống như HTTP, RTSP sử dụng TCP là giao thức để duy trì một kết nối đầu cuối tới đầu cuối và các thông điệp điểu khiển của RTSP được gửi bởi máy client tới máy server. Nó cũng thực hiện điều khiển lại các đáp trả từ máy server tới máy client. Cổng mặc định được sử dụng bởi giao thức này là 554. Để thực hiện kỹ thuật streaming video theo giao thức RTSP nhất thiết máy client phải gửi lên máy server ( streaming server) những request sau và phải theo một trình tự nhất định. Đầu tiên, máy client sẻ gửi yêu cầu OPTIONS kèm với đường link trỏ tới file video cần xem tới máy server, để máy server chấp nhận đường link này. Hình 2: OPTIONS Request Hình 3: DESCRIBE Request Hình 4: SETUP Request Hình 5: PLAY Request Hình 6: PAUSE Request Hình 7: TEARDOWN Request RTP (Real-time Transport Protocol) định dạng một gói tin RTP được dùng để truyền trên luồng dữ liệu video hay audio dựa trên địa chỉ IP. RTP được sử dụng trong phiên giao dịch giữa các hệ thống giải trí hoặc giao tiếp mà có triển khai kỹ thuật streaming video như là telephony, ứng dụng hội họp từ xa, hệ thống giám sát bằng hình ảnh dựa trên IP. RTP được sử dụng kết hợp với giao thức RTCP ( RTP Control Protocol ). Trong đó, RTP được sử dụng để đóng gói các frame dữ liệu ( audio và video) để truyền trên luồng dữ liệu thì RTCP được sử dụng để giám sát chất lượng của dịch vụ (QoS) hoặc để thống kê theo các tiêu chí trong quá trình truyền tải. Thường thì giao thức RTP sử dụng cổng có số hiệu chẵn còn giao thức RTCP sử dụng cổng có số hiệu lẻ. RTP được thiết kế cho quá trình streaming theo thời gian thực từ theo kiểu điểm tới điểm. Giao thức này cung cấp tiện ích để dò ra những gói tin RTP đã quá hạn. Trên thực tế, gói tin RTP sử dụng địa chỉ IP trên mạng để định danh các máy tính gửi và nhận. RTP cũng hỗ trợ truyền dữ liệu tới nhiều điểm đích thông qua địa chỉ IP multicast. RTP được phát triển bởi tổ chức Audio / Video Transport của tổ chức tiêu chuẩn IETF. RTP được sử dụng kết hợp với các giao thức khác như H.323 và giao thức RTSP. Chuẩn RTP định nghĩa một cặp giao thức làm việc với nhau đó là RTP và RTCP. RTP được sử dụng để truyền tải dữ liệu đa phương tiện và giao thức RTCP được sử dụng để gửi các thông tin điều khiển với các tham số QoS. Các giao thức thành phần: Đặc tả RTP gồm 2 giao thức con là RTP và RTCP Giao thức truyền, RTP, quy định cách thức truyền dữ liệu theo thời gian thực. Thông tin được cung cấp bởi giao thức này bao gồm thời gian đồng bộ (timestamps), số thứ tự gói tin (phục vụ cho việc tìm gói tin bi lạc ) và chi phí cho việc mã hóa định dạng dữ liệu. Giao thức điều khiển, RTCP được sử dụng cho việc kiểm tra chất lượng (QoS) luồng dữ liệu và thực hiện đồng bộ giữa các luồng dữ liệu. So với RTP, thì băng thông của RTCP sẽ nhỏ hơn, vào cỡ 5%. Một giao thức cho phép miêu tả dữ liệu đa phương tiện nhưng không bắt buộc phải kèm theo là giao thức miêu tả phiên ( Session Description Protocol – SDP). Phiên ( Session ): Một phiên RTP được thiết lập cho mỗi luồng dữ liệu. Một phiên bao gồm một địa chỉ IP với một cặp cổng của giao thức RTP và RTCP. Ví dụ, các luồng video và audio sẽ có các phiên RTP khác nhau, bên nhận sẽ nhận một cách riêng biệt giữa dữ liệu video và audio thông qua 2 cổng khác nhau cho 2 giao thức RTP và RTCP. Thường thì số hiệu cổng của RTP là một số chẵn trong khoảng 1024 tới 65535 và cổng của RTCP là một số lẻ kế tiếp. Hình vẽ dưới đây là hình ảnh của một header của gói tin RTP Hình 8: Header của RTP Packet · Version ( 2 bits): Cho biết phiên bản của giao thức này. Phiên bản hiện tại là phiên bản 2. · P (Padding) (1 bit) : Cho biết số các byte mở rộng cần thêm vào cuối của gói tin RTP. Ví dụ trong trường hợp ta muốn sử dụng các thuật toán mã hóa, ta có thể thêm vào một số byte vào phần kết thúc của gói tin để tiến hành mã hóa frame trên đường truyền. · X ( Extension) ( 1bit): Cho biết có thêm phần header mở rộng vào sau phần header chính hay không. · CC (CSRC Count) ( 4 bit) : Chứa con số định danh CSRC cho biết kích thước cố định của header. · M ( Marker) ( 1 bit) : Cho biết mức của ứng dụng và được định nghĩa bởi một profile. Nếu được thiết lập, có nghĩa là dữ liệu hiện tại đã được tính toán chi phí một cách thích hợp · PT (Payload Type) ( 7 bit) : Cho biết định dạng của file video. Đây là một đặc tả được định nghĩa bởi một profile RTP. · Sequence Number (16 bits) : số hiệu của frame. Và sẽ được tăng lên 1 đơn vị cho mỗi gói tin RTP trước khi gửi và được sử dụng bởi bên nhận để dò ra các gói bị lạc và có thể phục hồi lại gói có số thứ tự đó. · Timestamp ( 32 bits): Được sử dụng thông báo cho bên nhận biết để phát lại frame này trong khoảng thời gian thích hợp. 5. Thư viện mã nguồn mở LIVE555 LIVE555 là một tập các mã nguồn được viết bằng C++ và được gom nhóm thành thư viện. LIVE555 là thư viện được dùng để viết các chương trình streaming video, audio và các chương trình chơi video và audio theo kiểu streaming. Thư viện này hỗ trợ các chuẩn giao thức mở như RTP/RTCP và RTSP phục vụ cho kỹ thuật streaming. Hơn thế nữa, LIVE555 có thể quản lý được các định dạng video như H.264, MPEG, VP8 and DV và các định dạng audio như MPEG, AMR, AC-3 và Vorbis. Mặt khác thư viện này cũng được thiết kế để có khả năng mở rộng hỗ trợ thêm các định dạng video và audio khác nữa một cách dễ dàng. LIVE555 có thể sử dụng để triển khai các ứng dụng RTSP server và RTSP client. Có rất nhiều dịch vụ streaming video hay streaming audio sử dụng LIVE555 để cung cấp dịch vụ của mình. Mặt khác, cũng có rất nhiều chương trình chơi nhạc, phát video sử dụng thư viện này để triển khai RTSP client như là VLC media player hay Mplayer. LIVE555 được phát triển bởi công ty Live Networks. LIVE555 bao gồm 4 thư mục con: ¢ UsageEnvironment: Thư mục này bao gồm các lớp UsageEnvironment và lớp TaskScheduler được sử dụng cho việc lập lịch xử lý các sự kiện, gán các chương trình xử lý sự kiện cho các sự kiện bất đồng bộ và xuất ra các thông điệp cảnh báo hoặc các thông điệp lỗi. Ngoài ra, lớp HashTable định nghĩa một giao diện cho một bảng băm tổng hợp. Các lớp này hầu hết là các lớp cơ sở ảo, các hàm ảo bắt buộc phải được định nghĩa ở các lớp kế thừa. ¢ Groupsock: Thư mục này chứa các lớp đóng gói lại các giao diện mạng và sockets. Các lớp này đóng gói một socket được dùng cho việc gửi ( hay nhận) các gói tin multicast. ¢ liveMedia: Thư mục này có chứa các lớp tạo thành một cấu trúc phân cấp lớp mà lớp gốc là lớp Medium – lớp này định nghĩa các kiểu streaming media và các thuật toán mã hóa codecs. ¢ BasicUsageEnvironment: Thý mục này chứa các lớp con của các lớp cõ sở ảo trong thý mục UsageEnvironment. Các lớp này ðýợc sử dụng rất ðõn giản cho các ứng dụng console. Các thao tác ðọc sự kiện hay delay ðều ðýợc sử lý bởi một vòng lặp select(). Suu Tap |
|
|