Thông tin cơ bản về ứng dụng đa phương tiện

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Khi xử lý nội dung nghe nhìn, thường thì bạn phải thay đổi các đặc điểm của tệp nội dung nghe nhìn, chẳng hạn như tốc độ bit hoặc độ phân giải. Việc tìm một cách đơn giản để bắt đầu có thể khá đáng sợ. Trên trang này, bạn sẽ tìm hiểu về các công cụ được dùng cũng như cách cài đặt các công cụ đó một cách nhanh chóng.

Trước tiên, chúng tôi sẽ mô tả cách sử dụng cơ bản cho hai tiện ích đa phương tiện dòng lệnh phổ biến: Shaka PackagerFFmpeg. Sau đó, chúng tôi sẽ giúp bạn nhanh chóng cài đặt các công cụ này. Tại sao lại đề cập đến hai ứng dụng? Mặc dù cả hai đều mạnh mẽ và hữu ích, nhưng cả hai đều không làm mọi việc cần thiết để chuẩn bị nội dung nghe nhìn cho web. Chúng tôi cũng tạo các trang Chuyển đổi nội dung nghe nhìnMã hoá nội dung nghe nhìn để trình bày nhiều thao tác phổ biến hơn với 2 ứng dụng này.

Các ứng dụng này không phải là những lựa chọn duy nhất dành cho các thao tác thao tác với tệp, nhưng là hai trong số những ứng dụng mạnh mẽ và phổ biến nhất. Các tuỳ chọn khác bao gồm ứng dụng GUI Miro, HandBrakeVLC. Ngoài ra, còn có các dịch vụ mã hoá/chuyển mã như Zencoder, Amazon Elastic encryptionGoogle Transcoder API.

Công cụ Shaka Packager

Shaka Packager là một SDK đóng gói nội dung nghe nhìn miễn phí. Nếu bạn đang sử dụng trình phát nội dung đa phương tiện trên trang web, bạn sẽ dùng Shaka Packager để chuẩn bị tệp. API này hỗ trợ chuyển đổi cho 2 giao thức phát video phổ biến nhất: Phát trực tuyến thích ứng động qua HTTP (DASH) hoặc Phát trực tiếp HTTP (HLS). Shaka Packager hỗ trợ các tính năng bảo mật chính: mã hoá phổ biến và quản lý quyền kỹ thuật số (DRM) trên Widevine. Kênh này cũng có thể xử lý sự kiện phát trực tiếp và video theo yêu cầu.

Mặc dù có nội dung gì trong gói, tiện ích này dành cho không chỉ các nhà phát triển C++. Bạn có thể sử dụng tiện ích này làm thư viện để xây dựng phần mềm nội dung đa phương tiện và vừa là tiện ích dòng lệnh để chuẩn bị tệp nội dung nghe nhìn nhằm phát trên web. Đó là dung lượng sau rất hữu ích cho chúng ta ở đây. Trên thực tế, đối với các nhà sáng tạo nội dung nghe nhìn trên web, Shaaka Packager là cách duy nhất để thực hiện một số công việc mà không phải tốn tiền mua các ứng dụng thương mại đắt đỏ.

Dưới đây là mẫu cơ bản cho lệnh Shaka Packager:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

Đây không phải là những gì bạn nhận được nếu nhập packager -help. Ví dụ này dễ hiểu hơn và cũng phản ánh các ví dụ trong tài liệu về Shak Packager. Xin lưu ý rằng có nhiều mục stream_descriptor trong mẫu. Mặc dù chúng tôi không cho thấy, nhưng bạn có thể thao tác riêng biệt với luồng video và âm thanh của tệp bằng một lệnh duy nhất.

So sánh mẫu cơ bản này với cách sử dụng đơn giản hiển thị đặc điểm tệp. Trong ví dụ này, chúng ta đã sắp xếp các phần tương đương.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Lệnh sẽ xuất ra:

File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
 codec_string: avc1.640028
 time_scale: 30000
 duration: 300300 (10.0 seconds)
 is_encrypted: false
 codec: H264
 width: 1920
 height: 1080
 pixel_aspect_ratio: 1:1
 trick_play_factor: 0
 nalu_length_size: 4

Stream [1] type: Audio
 codec_string: mp4a.40.2
 time_scale: 48000
 duration: 481280 (10.0 seconds)
 is_encrypted: false
 codec: AAC
 sample_bits: 16
 num_channels: 2
 sampling_frequency: 48000
 language: eng
 seek_preroll_ns: 20833

Hãy tìm các đặc điểm được thảo luận trong bài viết Kiến thức cơ bản về tệp nội dung nghe nhìn và lưu ý một số điều sau. Chiều cao và chiều rộng là chính xác đối với HD đầy đủ, và các bộ mã hoá và giải mã âm thanh và video là một trong những bộ mã hoá và giải mã được ưu tiên cho các loại vùng chứa, AAC cho âm thanh và H264 cho video. Ngoài ra, cũng lưu ý rằng các luồng được xác định bằng số. Các phần tử này rất hữu ích cho các thao tác điều khiển âm thanh và video một cách riêng biệt.

Lưu ý rằng dữ liệu đầu ra ở trên không cho thấy tốc độ bit. Mặc dù thiếu những gì, kết quả này dễ đọc hơn nên chúng tôi sử dụng nó bất cứ khi nào có thể. Khi cần thông tin mà Shaka Packager không lấy được (chẳng hạn như tốc độ bit), chúng tôi sẽ sử dụng FFmpeg.

FFmpeg

FFmpeg cũng là một ứng dụng miễn phí để ghi, chuyển đổi và truyền trực tuyến các tệp nội dung nghe nhìn. Các chức năng của ứng dụng này không tốt hơn hay kém hơn Shaka Packager. Chúng chỉ khác nhau.

Mẫu cơ bản của lệnh FFmpeg sẽ có dạng như sau:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

Giống như Shaka Packager, ứng dụng này có thể xử lý nhiều luồng. Một số tuỳ chọn của tệp được sử dụng ở nhiều vị trí và thao tác với kết quả đầu ra theo cách khác nhau tuỳ thuộc vào vị trí của các tuỳ chọn đó trong lệnh. Hãy lưu ý điều này khi bạn xem các câu hỏi về FFmpeg trên Stack Overflow và các trang web tương tự.

Chúng ta sẽ lại so sánh mẫu cơ bản với ví dụ để hiển thị đặc điểm tệp.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

Ngoài thông tin mà chúng tôi yêu cầu, thao tác này còn in một thông báo lỗi như trong ví dụ bên dưới. Lý do là về mặt kỹ thuật, đây là cách sử dụng FFmpeg không chính xác. Chúng tôi sử dụng API này vì nó hiển thị thông tin mà chúng tôi quan tâm.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.17.100
  Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Cài đặt ứng dụng bằng Docker

Nếu dự định làm theo và thử các lệnh của chúng tôi, bạn có thể cài đặt các công cụ cần thiết theo cách thủ công hoặc thực hiện theo một đường dẫn đơn giản và sử dụng Docker. Bạn nên sử dụng Docker, vì việc này sẽ giúp bạn tiết kiệm rất nhiều thời gian. Ngoài ra, chúng tôi còn cung cấp hướng dẫn để giúp bạn thiết lập nhanh chóng.

  1. Bắt đầu bằng cách tạo một thư mục mới ở đâu đó trên máy tính có tên media-tools; bạn có thể sử dụng bất kỳ tên nào bạn muốn, chỉ cần lưu ý rằng các hướng dẫn sau giả định rằng bạn đang sử dụng media-tools làm tên thư mục.

  2. Tạo thư mục dockermedia bên trong media-tools. Thao tác này sẽ xoá thư mục media của bạn khỏi ngữ cảnh bản dựng. Việc này rất quan trọng vì media là nơi lưu trữ các tệp mà chúng tôi dự định thực hiện và một số tệp có thể khá lớn. Việc đặt trực tiếp Dockerfile vào media-tools sẽ làm chậm quá trình tạo hình ảnh nếu bạn xây dựng lại hình ảnh sau đó – có thể là để thay đổi các phiên bản đã cài đặt.

  3. Tạo /media-tools/docker/Dockerfile rồi thêm hướng dẫn tạo sau đây:

    FROM google/shaka-packager:release-v2.4.3 as packager
    FROM jrottenberg/ffmpeg:4.3.2-alpine38
    COPY --from=packager /usr/bin /usr/bin
    ENTRYPOINT  ["sh"]
    
  4. Xây dựng hình ảnh:

    docker build -t media-tools ./docker
    
  5. Chạy hình ảnh dưới dạng một shell tương tác. Trên Linux:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    Trên Windows:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

Trong khi chạy hình ảnh, bạn có thể kiểm tra các phiên bản cho cả FFmpeg và Shaka Packager để xác thực mọi thứ đã thành công bằng cách chạy ffmpeg -versionpackager --version. Kết quả sẽ có dạng như sau:

/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release

Sau khi bạn đã thử sử dụng Shaka Packager và FFmpeg, bạn có thể tiếp tục tìm hiểu các khái niệm cơ bản, tiếp theo là Kiến thức cơ bản về tính năng phát trực tuyến nội dung nghe nhìn.