Cách chúng tôi tăng tốc độ mã hóa video lên gấp XNUMX lần

Cách chúng tôi tăng tốc độ mã hóa video lên gấp XNUMX lần

Mỗi ngày có hàng triệu người xem video trên Internet. Nhưng để video có sẵn, nó không chỉ phải được tải lên máy chủ mà còn phải được xử lý. Điều này xảy ra càng nhanh thì càng tốt cho dịch vụ và người dùng.

Tên tôi là Askar Kamalov, một năm trước tôi đã gia nhập nhóm công nghệ video Yandex. Hôm nay tôi sẽ nói ngắn gọn với độc giả của Habr về cách, bằng cách song song hóa quá trình mã hóa, chúng tôi đã tăng tốc đáng kể việc phân phối video đến người dùng.

Bài đăng này chủ yếu sẽ thu hút sự quan tâm của những người trước đây chưa nghĩ đến những gì xảy ra trong các dịch vụ video. Trong phần bình luận, bạn có thể đặt câu hỏi và đề xuất chủ đề cho các bài viết trong tương lai.

Một vài lời về nhiệm vụ chính nó. Yandex không chỉ giúp bạn tìm kiếm video trên các trang khác mà còn lưu trữ video cho các dịch vụ riêng của mình. Cho dù đó là một chương trình gốc hay một trận đấu thể thao được phát sóng, một bộ phim trên KinoPoisk hay video trên Zen và News - tất cả những thứ này đều được tải lên máy chủ của chúng tôi. Để người dùng có thể xem được video cần phải chuẩn bị: chuyển đổi sang định dạng được yêu cầu, tạo bản xem trước hoặc thậm chí là chạy qua công nghệ DeepHD. Một tập tin chưa được chuẩn bị chỉ chiếm dung lượng. Hơn nữa, chúng ta không chỉ nói về việc sử dụng phần cứng tối ưu mà còn về tốc độ cung cấp nội dung cho người dùng. Ví dụ: bản ghi lại thời điểm quyết định của một trận đấu khúc côn cầu có thể được tìm kiếm trong vòng một phút sau sự kiện đó.

Mã hóa tuần tự

Vì vậy, mức độ hài lòng của người dùng phần lớn phụ thuộc vào tốc độ xuất hiện của video. Và điều này chủ yếu được xác định bởi tốc độ chuyển mã. Khi không có yêu cầu nghiêm ngặt về tốc độ tải lên video thì không có vấn đề gì. Bạn lấy một tệp duy nhất, không thể chia nhỏ, chuyển đổi nó và tải nó lên. Khi bắt đầu cuộc hành trình, đây là cách chúng tôi làm việc:

Cách chúng tôi tăng tốc độ mã hóa video lên gấp XNUMX lần

Máy khách tải video lên bộ lưu trữ, thành phần Trình phân tích thu thập thông tin meta và chuyển video sang thành phần Công nhân để chuyển đổi. Tất cả các giai đoạn được thực hiện tuần tự. Trong trường hợp này, có thể có nhiều máy chủ mã hóa nhưng chỉ có một máy chủ đang bận xử lý một video cụ thể. Sơ đồ đơn giản, minh bạch. Đây là nơi lợi thế của nó kết thúc. Sơ đồ này chỉ có thể được mở rộng theo chiều dọc (do mua máy chủ mạnh hơn).

Mã hóa tuần tự với kết quả trung gian

Để bằng cách nào đó xoa dịu sự chờ đợi đau đớn, ngành này đã đưa ra một tùy chọn mã hóa nhanh. Cái tên này gây hiểu nhầm vì trên thực tế, quá trình mã hóa đầy đủ diễn ra tuần tự và mất nhiều thời gian. Nhưng với một kết quả trung gian. Ý tưởng là thế này: chuẩn bị và xuất bản phiên bản video có độ phân giải thấp càng nhanh càng tốt và chỉ sau đó là phiên bản có độ phân giải cao hơn.

Một mặt, video trở nên khả dụng nhanh hơn. Và nó hữu ích cho các sự kiện quan trọng. Nhưng mặt khác, hình ảnh bị mờ và điều này gây khó chịu cho người xem.

Hóa ra bạn không chỉ cần xử lý nhanh video mà còn phải duy trì chất lượng của nó. Đây chính là điều mà người dùng mong đợi ở một dịch vụ video hiện nay. Có vẻ như chỉ cần mua những máy chủ hiệu quả nhất (và thường xuyên nâng cấp tất cả chúng cùng một lúc là đủ). Nhưng đây là ngõ cụt, vì luôn có một đoạn video sẽ khiến ngay cả phần cứng mạnh nhất cũng phải chậm lại.

Mã hóa song song

Sẽ hiệu quả hơn nhiều nếu chia một vấn đề phức tạp thành nhiều vấn đề ít phức tạp hơn và giải quyết chúng song song trên các máy chủ khác nhau. Đây là MapReduce dành cho video. Trong trường hợp này, chúng tôi không bị giới hạn bởi hiệu suất của một máy chủ và có thể mở rộng quy mô theo chiều ngang (bằng cách thêm máy mới).

Nhân tiện, ý tưởng chia video thành nhiều phần nhỏ, xử lý chúng song song và dán chúng lại với nhau không phải là bí mật gì cả. Bạn có thể tìm thấy nhiều tài liệu tham khảo về cách tiếp cận này (ví dụ: trên Habré tôi giới thiệu một bài đăng về dự án DistVIDc). Nhưng điều này không làm cho mọi việc trở nên dễ dàng hơn về tổng thể, bởi vì bạn không thể chỉ lấy một giải pháp làm sẵn và xây dựng nó vào nhà của mình. Chúng tôi cần sự thích ứng với cơ sở hạ tầng, video và thậm chí cả tải trọng của chúng tôi. Nói chung, việc viết của riêng bạn sẽ dễ dàng hơn.

Vì vậy, trong kiến ​​trúc mới, chúng tôi đã chia khối Worker nguyên khối có mã hóa tuần tự thành các microservice Segmenter, Tcode, Combiner.

Cách chúng tôi tăng tốc độ mã hóa video lên gấp XNUMX lần

  1. Trình phân đoạn chia video thành các đoạn có thời lượng khoảng 10 giây. Các mảnh bao gồm một hoặc nhiều GOP (nhóm hình ảnh). Mỗi GOP độc lập và được mã hóa riêng biệt để có thể giải mã mà không cần tham chiếu đến các khung từ các GOP khác. Nghĩa là, các đoạn có thể được phát độc lập với nhau. Phân đoạn này làm giảm độ trễ, cho phép quá trình xử lý bắt đầu sớm hơn.
  2. Bộ mã hóa xử lý từng đoạn. Nó nhận một tác vụ từ hàng đợi, tải một đoạn xuống từ bộ lưu trữ, mã hóa nó thành các độ phân giải khác nhau (hãy nhớ rằng người chơi có thể chọn phiên bản dựa trên tốc độ kết nối), sau đó đưa kết quả trở lại bộ nhớ và đánh dấu đoạn đó là đã xử lý trong cơ sở dữ liệu. Sau khi xử lý tất cả các mảnh, Tcode gửi tác vụ để tạo kết quả cho thành phần tiếp theo.
  3. Trình kết hợp thu thập các kết quả cùng nhau: tải xuống tất cả các đoạn do Tcode tạo ra, tạo luồng cho các độ phân giải khác nhau.

Một vài lời về âm thanh. Bộ giải mã âm thanh AAC phổ biến nhất có một tính năng khó chịu. Nếu bạn mã hóa các đoạn riêng biệt thì bạn sẽ không thể dán chúng lại với nhau một cách liền mạch. Sự chuyển đổi sẽ được chú ý. Codec video không có vấn đề này. Về mặt lý thuyết, bạn có thể tìm kiếm một giải pháp kỹ thuật phức tạp, nhưng trò chơi này đơn giản là chưa đáng giá (âm thanh nặng hơn đáng kể so với video). Do đó, chỉ có video được mã hóa song song và toàn bộ đoạn âm thanh được xử lý.

Những phát hiện

Nhờ xử lý video song song, chúng tôi đã giảm đáng kể độ trễ giữa thời điểm video được tải lên chúng tôi và video có sẵn cho người dùng. Ví dụ: trước đây có thể mất hai giờ để tạo một số phiên bản đầy đủ có chất lượng khác nhau cho một bộ phim FullHD kéo dài một tiếng rưỡi. Bây giờ tất cả điều này mất 15 phút. Hơn nữa, với quá trình xử lý song song, chúng tôi tạo ra phiên bản có độ phân giải cao thậm chí còn nhanh hơn phiên bản có độ phân giải thấp bằng phương pháp kết quả trung gian cũ.

Và một điều nữa. Với cách tiếp cận cũ, hoặc không có đủ máy chủ hoặc chúng không hoạt động và không có nhiệm vụ. Mã hóa song song cho phép bạn tăng tỷ lệ tái chế sắt. Hiện tại, cụm hơn một nghìn máy chủ của chúng tôi luôn bận rộn với một việc gì đó.

Trên thực tế, vẫn còn chỗ để cải thiện. Ví dụ: chúng tôi có thể tiết kiệm đáng kể thời gian nếu bắt đầu xử lý các đoạn video trước khi video đó đến với chúng tôi toàn bộ. Như họ nói, nhiều hơn nữa sẽ đến.

Viết nhận xét về những nhiệm vụ trong lĩnh vực làm việc với video mà bạn muốn đọc.

Liên kết hữu ích đến kinh nghiệm của các đồng nghiệp trong ngành

Nguồn: www.habr.com

Thêm một lời nhận xét