Top Ad unit 728 × 90

Latest news

recent

FFMPEG và khởi đầu với VS2010

Hôm nay tôi làm việc với FFMPEG, thư viện này là một trong những thư viện mở, miễn phí, phổ biến, hữu ích, quan trọng nhất liên quan đến vấn đề nén (compress), giải nén (decompress), xử lý, truyền và nhận video, audio hiện nay. FFMPEG được đánh giá cao bởi tốc độ, khả năng hỗ trợ đa môi trường từ window, linux tới mac, từ máy để bàn mạnh mẽ tới thiết bị nhúng yếu ớt, từ ứng dụng đơn cho tới ứng dụng máy chủ, từ ứng đụng đầu cuối tới ứng dụng cung cấp dịch vụ. Ngoài ra sự uyển chuyển trong cấu trúc, dễ dàng mở rộng và hỗ trợ đa dạng khiến nó trở nên đáp ứng hầu như mọi nhu cầu của nhà phát triển. Tuy nhiên một nhược điểm rất lớn của FFMPEG là dù đa năng nhưng hệ thống tài liệu của FFMPEG lại khá nghèo nàn, đa phần chỉ là mô tả mã nguồn bằng doxygen, ví dụ thì rất ít, ngay các hệ thống mở khác xài lại FFMPEG thì hầu như hết sức phức tạp và không có chỉ dẫn gì thêm, điều này làm cho người dùng, đặc biệt là các nhà phát triển đã quen với môi trường ngoài linux gặp trở ngại khi tiếp cận. Đó là lý do tôi nghĩ mình nên note lại những thông tin cần thiết cho các đồ đệ, anh em chiến hữu chíp như tôi hiện nay đỡ phần khổ sở trong tương lai.
  1. Một vài lưu ý về FFMPEG:
    - Được viết bằng C dựa theo chuẩn ISO C90 và một vài cú pháp của ISO C99.
    - Được xây dựng để biên dịch bằng các trình biên dịch GCC
    - FFMPEG bên cạnh tài nguyên tự bản thân của thư viện còn sử dụng rất nhiều các thư viện khác bên ngoài, nó có khả năng được mở rộng, tích hợp thêm các thành phần như các loại codec, các bộ lọc filter ...
    - Cách biên dịch phổ biến nhất được biết đến để tao ra DLL của FFMPEG dùng chạy trên window là dùng MingGW, vì mục tiêu của bài viết này là chỉ cách làm sao dùng thư viện FFMPEG với VS2010 nên tôi mặc định đã có binary của thư viện và chỉ xài chứ không biên dịch lại, cách dùng MingGW để biên dịch trong trường hợp ta muốn chỉnh sửa thư viện sẽ được trình bày trọn vẹn trong bài viết khác.
    - FFMPEG bao gồm:
           + Thư viện:
               .:: avcodec: tổng hợp các bộ nén / mã hóa và giãi nén / giãi mã cho video và audio.
               .:: avdevice: tạo nền giao tiếp với các thiết bị, trình quản lý thiết bị nhập xuất video, audio.
               .:: avfilter: là tập hợp các thủ tục xử lý, chỉnh sửa, hiệu ứng trên video, audio.
               .:: avformat: quản lý các định dạng nhập xuất, cấu trúc file (avi, mpeg, ...), giao thức truyền nhận  audio, video (http, rtp, ...)
               .:: swscale: dùng trong việc thay đổi tỉ lệ, co giãn kích cở, chuyển đổi định dạng điểm ảnh, không gian màu ...chử sw đại diện cho software vì thông thường các thao tác này được hỗ trợ bởi phần cứng hiển thị.
               .:: ...
           + CLI (Command line interface):
               .:: FFPlay: một ứng dụng nhỏ nhằm play audio, video dùng để test các API của ffmpeg.
               .:: FFMPEG: ứng dụng có khả năng đọc audio, video từ nhiều nguồn khác nhau, thực hiện xử lý, chuyển đổi, chỉnh sửa và xuất ra các kiểu định dạng khác nhau, phương thức khác nhau.
               .:: ffprobe: một ứng dụng có khả năng đọc, thu thập thông tin mô tả cả các nguồn đa phương tiện khác nhau và xuất báo cáo một cách trực quan cho người dùng.
               .:: ffserver: có khả năng làm một máy chủ dịch vụ để stream video / audio dưới các giao thức như  RTP/RTSP/HTTP.
               .:: ... 
  2. Yêu cầu về chuẩn bị môi trường:
    - Visual studio 2010
    - Download về các tài nguyên của FFMPEG ở đây bao gồm:
               .:: Mã nguồn [Bi1]
               .:: Bản wrapper stdint.h và inttypes.h dành cho Microsoft Visual Studio. [Bi4] (vì VS chỉ hỗ trợ ISO C89).
    Ở đây tôi sẽ trình bày xây dựng dự án dùng FFMPEG trên nền win32 nên chỉ dùng các bản dành cho win32, nếu bạn làm trên win64 thì tải về bản tương ứng, mọi thứ đều tiến hành tương tự.
  3. Sắp xếp tài nguyên:
    Từ các tài nguyên liên quan tới FFMPEG vừa tải về ở trên ta sắp xếp lại và tổ chức mọi thứ gọn gàng trong một thư mục có tên ExtLib theo hình dưới (chú ý các kí hiệu Bi1, Bi2 ... tương ứng với các gói download ở trên)
  4. Chi tiết thiết lập dự án với VS2010:
    - Tạo dự án mới dạng C++, console application, empty.


    - Sau khi tạo xong bạn sẽ có một cấu trúc dự án được tạo ra bởi VS2010, hãy copy thư mục ExtLib vừa tạo ở trên vào dự án theo cấu trúc như hình dưới đây:

    Như vậy chúng ta đã hoàn bước cấu trúc dự án. Đây chỉ là một gợi ý của tôi và các dự án của IEEV tuân theo, bạn có thể sắp xếp các tài nguyên theo ý mình.
    - Tiếp theo chúng ta sẽ đi vào cấu hình cho VS2010 có thể biên dịch được dự án.




    - Sau khi cấu hình xong chúng ta sẽ tạo mới một file .cpp trong dự án và bắt đầu viết một vài dòng mã chương trình chào hỏi FFMPEG.

    - Như vậy tôi đã hướng dẫn đầy đủ để các bạn có thể tự viết chương trình dùng thư viện FFMPEG, muốn sử dụng FFMPEG đáp ứng nhu cầu bạn phải đọc tài liệu và doxygen về API của FFMPEG trên trang web chính của nó, chạy các ví dụ của FFMPEG mà bạn có thể tìm thấy tại vị trí được chỉ trong hình dưới và tham khảo tài liệu hướng dẫn viết video player dựa trên FFMPEG của Fabrice Bellard.

    - Để chạy các ví dụ này bạn chỉ đơn giản là thay nội dung file .cpp tôi tạo ở trên bằng nội dung ví dụ. và nhớ thêm 2 phần được chú thích như trong file .cpp mẫu ở hình trên. Khi biên dịch chắc chắn bạn sẽ gặp rất nhiều lỗi, đừng lo lắng vì các lỗi này đều xuất phát từ một trong những nguyên nhân sau do không tương thích chuẩn C99
        + Convert kiểu một cách ngầm định, bạn fix bằng cách convert bằng thủ công ví dụ: a = (int*) malloc (...); thay vì là a = malloc (...);
         + Thay vì dùng snprintf ta dùng _snprintf
         + Nói chung rất nhiều lỗi có thể phát sinh nhưng hãy dũng cảm hỏi google và sửa từ từ, bạn sẽ thành công.

Binh Nguyen - Bioz
FFMPEG và khởi đầu với VS2010 Reviewed by Bioz Nguyen on 10:19:00 AM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.