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, bạn thường phải thay đổi đặc điểm của tệp nội dung nghe nhìn. như tốc độ bit hoặc độ phân giải. 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 sử dụng và cách để cài đặt một cách nhanh chóng.

Đầu tiên, chúng tôi mô tả cách sử dụng cơ bản cho hai tiện ích 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 có hiệu quả và hữu ích riêng, cũng không làm mọi thứ cần thiết để chuẩn bị nội dung truyền thông cho web. Chúng tôi cũng đã tạo Chuyển đổi nội dung nghe nhìnMã hoá nội dung nghe nhìn các trang hiển thị nhiều thao tác phổ biến hơn với hai ứng dụng này.

Những ứng dụng này không phải là lựa chọn duy nhất để thực hiện các thao tác thao tác với tệp, nhưng đây là hai trong số những cách phổ biến và mạnh mẽ nhất. Các tuỳ chọn khác gồm có GUI (Giao diện người dùng đồ hoạ) Miro, HandBrakeVLC. Ngoài ra còn có các công nghệ mã hoá/chuyển mã chẳng hạn như Zencoder, Amazon Elastic EncoderGoogle Transcoder API.

Bộ đóng gói Shaka

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

Bất kể nội dung trên gói, tiện ích này không chỉ dành cho C++ nhà phát triển. Bạn có thể sử dụng thư viện này vừa làm thư viện để xây dựng phần mềm đa phương tiện, vừa làm một tiện ích dòng lệnh để chuẩn bị các tệp đa phương tiện để phát lại trên web. Đó là hữu ích đối với chúng ta ở đây. Trên thực tế, đối với các nhà sáng tạo phương tiện truyền thông trên web, Shaka Packager là cách duy nhất để làm một số việc mà không phải tốn tiền các ứng dụng thương mại tốn kém.

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à nội dung bạn nhận được nếu nhập packager -help. Ví dụ này dễ hiểu hơn và điều này phản ánh các ví dụ trong Tài liệu về Trình tạo gói SSH. Xin lưu ý rằng có nhiều stream_descriptor mục trong mẫu. Mặc dù chúng tôi không hiển thị nội dung này, nhưng bạn có thể thao túng video và luồng âm thanh của một tệp riêng biệt trong một lệnh.

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 tôi đã 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 tạo ra như sau:

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

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 vài điều. Chiều cao và chiều rộng chính xác cho HD đầy đủ và Codec âm thanh và video là một trong những bộ mã hoá và giải mã được ưu tiên cho loại vùng chứa của chúng, AAC cho âm thanh và H264 cho video. Ngoài ra, xin lưu ý rằng luồng được xác định bằng số. Các thông báo này rất hữu ích đối với các thao tác điều khiển âm thanh và video riêng biệt.

Lưu ý rằng kết quả ở trên không cho thấy tốc độ bit. Bất kể thiếu những gì, kết quả này dễ đọc hơn, vì vậy chúng tôi sử dụng nó bất cứ khi nào có thể. Khi chúng tôi 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ử dụng FFmpeg.

FFmpeg

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

Mẫu cơ bản cho lệnh FFmpeg 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 sử dụng ở nhiều vị trí và thao tác với kết quả đầu ra tệp khác nhau tuỳ theo vị trí của chúng 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ẽ so sánh lại mẫu cơ bản với ví dụ hiển thị tệp đặc điểm.

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

    ffmpeg                                     -i glocken.mp4

Ngoài thông tin chúng tôi yêu cầu, thao tác này cũng in thông báo lỗi như trong ví dụ dưới đây. Đó là vì về mặt kỹ thuật, đây là một lỗi FFmpeg. Chúng tôi sử dụng hồ sơ 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 bạn định làm theo và thử dùng 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 chọn cách đơn giản và sử dụng Docker. Bạn nên dùng Docker, vì tính năng 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ũng chúng tôi đã cung cấp các 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 là media-tools; bạn có thể sử dụng bất cứ tên nào mình thích, chỉ cần lưu ý rằng các hướng dẫn sau giả sử 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ẽ tách thư mục media của bạn khỏi ngữ cảnh bản dựng. Điều này quan trọng vì media là nơi lưu trữ các tệp mà chúng ta dự định thực hiện các thao tác trên đó, và một số tệp có thể khá lớn. Đặ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 đường bộ—có thể để thay đổi các phiên bản đã cài đặt.

  3. Tạo /media-tools/docker/Dockerfile và 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. Tạo 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 của cả FFmpeg và Shaka Packager để xác thực mọi thứ đã thành công hay chưa bằng cách chạy ffmpeg -versionpackager --version Kết quả đầu ra 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

Giờ thì 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ề phát trực tuyến nội dung nghe nhìn.