Tiểu sử Đặc điểm Phân tích

Cổng giao thức rtmp 1935. Phát trực tuyến qua Nginx-RTMP: một số công thức nấu ăn làm sẵn

Ban đầu, RTMP (Giao thức nhắn tin thời gian thực) được Adobe Systems tạo ra để truyền các luồng âm thanh và video, tin nhắn văn bản và các dữ liệu khác trên web. Nguyên tắc hoạt động chính của nó là bắt đầu tương tác giữa máy chủ và Flash Player của người dùng. RTMP dựa trên TCP, có nghĩa là ưu tiên cao của nó nằm ở việc duy trì kết nối ổn định và cung cấp tương tác có độ trễ thấp. Để phát các luồng mượt mà và truyền nhiều dữ liệu nhất có thể, máy chủ RTMP chia thông tin thành các đoạn. Sau đó, kích thước của các phân đoạn được xác định do định dạng tương tác giữa người dùng và máy chủ.

Điều thú vị hơn về RTMP là nó liên quan đến các kênh ảo khác nhau, truyền các gói dữ liệu trong một phiên phương tiện. Các kênh này có thể bao gồm: một kênh dành cho các yêu cầu RPC và kết quả của chúng, một kênh dành cho các thông báo điều khiển, các kênh để phát trực tuyến âm thanh và video. Hơn nữa, chúng có thể hoạt động đồng thời mà không gây ra bất kỳ vấn đề kỹ thuật nào cho nhau.

RTMP và RTSP

Về truyền dữ liệu, có một giao thức nổi tiếng khác được gọi là RTSP. Vì vậy, chúng ta hãy xem xét sự khác biệt giữa giao thức RTMP và RTSP.

Mục đích chính của RTSP (Real Time Streaming Protocol) là duy trì hoạt động của các máy chủ phát trực tuyến. Hơn nữa, giao thức này thiết lập sự tương tác giữa máy khách và máy chủ. RTSP cho phép người dùng cuối kiểm soát phiên phương tiện bằng các lệnh đơn giản như phát, tạm dừng và dừng. Nó cho phép khách hàng xem video từ bất kỳ đoạn nào mà không cần đợi tải xuống hoàn chỉnh.

RTMP, đến lượt nó, cũng duy trì các tính năng nêu trên. Tuy nhiên, máy chủ RTMP, bằng giao thức RTMP, có thể giám sát mọi hành động được thực hiện bởi máy khách bắt đầu từ khi người đó bắt đầu phiên cho đến khi phiên đóng. Theo cách này, nó làm cho các báo cáo trong RTMP chính xác hơn và cung cấp bức tranh đầy đủ về hoạt động của người dùng trong phiên truyền thông cụ thể. Tương tự như RTMP, RTSP cũng có khả năng phát trực tiếp. Tuy nhiên, truyền dữ liệu trực tuyến không phải là nhiệm vụ chính của RTSP, đó là lý do tại sao, vì mục đích này, nó cần một số giao thức bổ sung.

Làm thế nào nó hoạt động

Nguyên tắc của công việc RTMP rất đơn giản. Để bắt đầu luồng RTMP, chỉ cần thiết lập tương tác giữa máy chủ RTMP và trình phát RTMP của ứng dụng khách là đủ. Khi giao tiếp này được thiết lập, máy chủ bắt đầu truyền phương tiện dưới dạng một luồng byte liên tục. Quá trình này tiếp tục cho đến khi máy chủ hoặc người chơi kết thúc phiên.

Điều tốt là giao thức RTMP rất linh hoạt và cung cấp thông tin âm thanh, video và văn bản ở các định dạng khác nhau thuộc về khả năng của nó. Ví dụ, giao thức RTMP cho phép phát video ở định dạng MP4 và FLV, truyền âm thanh - ở định dạng MP3 và AAC. Hơn nữa, nhờ giao thức này, máy chủ RTMP gửi phương tiện đến các ứng dụng web cũng như thiết bị di động. Vì mục đích này, người dùng cần cài đặt Flash Player trong trình duyệt hoặc trên thiết bị di động. Sau đó, tệp swf, chứa tất cả thông tin phương tiện của luồng, sẽ được phát bằng Flash Player. Tuy nhiên, một trong những lợi ích lớn nhất của giao thức RTMP là nó có thể được áp dụng để phát trực tiếp và theo yêu cầu. Chúng ta hãy xem xét từng quy trình phát trực tuyến này.

Live streaming

Phát video trực tiếp thuộc về các tính năng chính của giao thức RTMP. Với sự trợ giúp của nó, bạn có thể phát trực tiếp video của mình trong quá trình quay video. Chủ yếu, phát sóng trực tiếp được sử dụng cho các sự kiện thể thao, chương trình, buổi hòa nhạc, v.v. Trong trường hợp này, giao thức RTMP thực sự là không thể thay thế được. Nó có độ trễ thấp so với thời gian thực khi phát trực tuyến, so với giao thức HTTP và độ trễ hơn mười giây, không thích hợp cho phát trực tiếp chuyên nghiệp.

Hãy xem lại một ví dụ sinh động hơn về chức năng đặc biệt của RTMP để phát trực tiếp. Ví dụ: các camera IP phổ biến hỗ trợ giao thức RTMP, được tích hợp loa phóng thanh, vì vậy bạn không chỉ có thể xem video trực tiếp mà còn có thể tham gia vào quá trình phát sóng và bày tỏ ý kiến ​​của bạn với người phát trực tuyến.

Phát trực tuyến theo yêu cầu

Phát trực tuyến theo yêu cầu cho phép người dùng chọn thời điểm xem nội dung phương tiện đã chọn, điều này thuận tiện hơn cho họ thay vì quan sát nội dung này tại thời điểm phát sóng. Theo quy định, video theo yêu cầu (VOD) được sử dụng vì một số lý do: vì video phát mượt mà ngay cả với tốc độ kết nối Internet thấp, khi số lượng người xem trực tuyến không đáng kể, vì chất lượng HD. Với giao thức RTMP, ngay cả VOD cũng hiệu quả hơn. Trước hết, nó cung cấp hỗ trợ đa hướng. Nếu bạn muốn có một luồng bên trong mạng làm việc của mình và cung cấp luồng đó cho nhiều người dùng, với RTMP, bạn sẽ không cần tạo các kết nối riêng biệt cho từng người dùng. Các giao thức khác như HTTP hoặc CDN không có tính năng này. Ngoài ra, RTMP cho phép người dùng kết nối lại với luồng video trong trường hợp có sự cố kết nối. Trong thời gian gặp sự cố với kết nối, video sẽ được phát từ bộ đệm và khi người dùng kết nối lại bộ đệm bắt đầu lấp đầy và theo cách đó, tránh việc tạm dừng thường xuyên trong luồng video.

Triển khai RTMP

Rõ ràng, tất cả những thông tin này khiến bạn tò mò về cách thực hiện RTMP. Đây là một giao thức đa nền tảng và nó hoạt động trên Windows, Mac, Linux, Android, Windows Mobile, iOS. Bạn có bảng điều khiển và thích chơi trò chơi? Bạn có thể dễ dàng sử dụng dịch vụ RTMP cho các thiết bị như Xbox One, PlayStation và PS Vita.

Do có nhiều nền tảng phù hợp với giao thức RTMP, có nhiều lựa chọn để triển khai nó. Chúng có thể thay đổi từ triển khai dòng lệnh đến triển khai mã nguồn mở đầy đủ tính năng.

triển khai dòng lệnh

Công cụ RTMPDump được sử dụng để triển khai dòng lệnh, vì nó đáp ứng hoàn hảo với việc ghi lại các luồng RTMP, phát sóng trực tiếp và video theo yêu cầu. Bên cạnh đó, RTMPDump là một công cụ mã nguồn mở có thể được sử dụng trên Linux, Android, Mac OS X và Microsoft. Tiện ích này rất phổ biến vì kích thước nhỏ và khả năng giải mã RTMPE, được mã hóa RTMP và RTMPS - RTMP an toàn.

Gói RTMPDump có ba chương trình: rtmpdump, rtmpsrv và rtmpsuck. Mỗi chương trình này thực hiện các chức năng cụ thể. Ví dụ: rtmpdump được sử dụng để thiết lập kết nối với máy chủ RTMP và bắt chính luồng; rtmpsuck cũng có thể nắm bắt luồng hoặc nó có thể hỗ trợ thu thập các thông số chính cho rtmpdump. Chức năng chính của rtmpsrv là theo dõi các kết nối và luồng.

Thực hiện đầy đủ

Nếu bạn quan tâm hơn đến việc triển khai đầy đủ, bạn sẽ cần ba phần mềm sau: bộ mã hóa video trực tiếp, máy chủ phát trực tuyến phương tiện và ứng dụng khách video. Bạn không biết cài đặt bộ mã hóa video trực tiếp nào? Sau đó, bạn có thể chọn giữa Flash Media Live Encoder, FFmpeg, WireCast, Wowza Transcoder, Nimble Streamer Transcoder. Tuy nhiên, hãy tính đến rằng phổ biến nhất là Flash Media Live Encoder, có sẵn để tải xuống miễn phí trên trang web của Adobe.

Đối với ứng dụng khách video, Adobe Flash Player là lựa chọn được khuyến khích nhất. Nó là một trình phát RTMP miễn phí và hoạt động như một trình cắm thêm từ trình duyệt hoặc thậm chí cả thiết bị di động. Flash Player phù hợp với Windows, OS X, Chrome OS và Linux. Các tùy chọn thay thế là Gnash và trình phát đa phương tiện VLC. Cả hai đều là trình phát đa phương tiện mã nguồn mở. Gnash có tất cả các cơ hội để thay thế Flash Player trong phát trực tuyến RTMP trên Linux. Đổi lại, trình phát đa phương tiện VLC không phải là phổ biến, vì nó chỉ có thể duy trì các luồng RTMP một phần.

Các máy chủ RTMP như Adobe Flash Media Server, Wowza Streaming Engine, Flussonic Media Server được cho là những máy chủ rất tốt. Tuy nhiên, bạn có thể cài đặt máy chủ RTMP miễn phí như Nginx với RTMP Module hoặc Red5, đây cũng là một máy chủ RTMP mã nguồn mở trên Java.

Cách giải quyết các vấn đề thường gặp nhất với giao thức RTMP

Giao thức RTMP, mặc dù có tất cả những ưu điểm rõ ràng của nó, nhưng cũng có một số nhược điểm. Do thực tế là nó khác nhiều so với giao thức HTTP, nó không được duy trì bằng HTML5. Hơn nữa, giao thức RTMP hoạt động kém trên iDevices và nó ảnh hưởng đến chất lượng truyền phát video. Trong trường hợp như vậy, tốt hơn là sử dụng giao thức HLS trên các thiết bị của Apple. Nguyên tắc hoạt động của HLS và RTMP khá giống nhau, nhưng, trong trường hợp với HLS, luồng được chia thành một loạt các tệp dựa trên HTTP nhỏ. Ban đầu, giao thức này được phát triển cho Quicktime, iOS và trình duyệt Safari. Tuy nhiên, giờ đây giao thức HLS cũng có thể được sử dụng trên nhiều nền tảng khác. Giao thức đối phó rất tốt với các giới hạn băng thông và điều chỉnh chất lượng video cho phù hợp. Xem xét tốc độ phân phối video, HLS sẽ không tốt nhất biến thể, vì độ trễ của nó là 20 giây.

Một nhược điểm khác của giao thức RTMP là nó dễ bị các vấn đề về băng thông. Đôi khi, băng thông thấp có thể gây ra gián đoạn trong quá trình phát trực tuyến phương tiện hoặc thậm chí luồng có thể không bắt đầu nếu tốc độ kết nối Internet không đủ. Một cách thay thế để phát sóng với băng thông hạn chế là sử dụng Dash. Dash là một công nghệ phát trực tuyến tốc độ bit thích ứng, cung cấp truyền phát phương tiện chất lượng cao. Kỹ thuật này có thể chẩn đoán băng thông của một người dùng cụ thể và điều chỉnh chất lượng video phù hợp với tốc độ kết nối. Ngoài ra, nó không thể làm được nếu không có bộ mã hóa mã hóa video ở nhiều tốc độ bit. Sau đó, người chơi sẽ chuyển đổi các mã hóa khác nhau do các tài nguyên phù hợp. Kết quả là, bộ đệm ít đạt được và có được trải nghiệm video tuyệt vời. Ví dụ, thật khó để ước tính tất cả các lợi ích của kỹ thuật này đối với việc phát trực tuyến các sự kiện lớn ở cấp quốc gia.

Một nhược điểm nữa của giao thức RTMP nằm ở chỗ cần phải cài đặt trình cắm Flash Player, nếu thiếu nó thì việc truyền phương tiện RTMP sẽ không thể thực hiện được. Ngoài ra, có một số rắc rối khi áp dụng RTMP cho các dịch vụ phát trực tuyến CDN.

Bạn vẫn có câu hỏi liên quan đến giao thức RTMP hoặc việc triển khai nó? và chúng tôi sẽ giúp bạn điều đó và chứng minh tất cả những lợi ích của nó trong thực tế.

Gần đây, tôi đã xem qua một chủ đề "Máy chủ phát trực tiếp dựa trên NGinx" về mô-đun tuyệt vời của Roman Harutyunyan (@rarutyunyan) cho nginx: nginx-rtmp-module. Mô-đun rất dễ cài đặt và cho phép bạn tạo một máy chủ để xuất bản các bản ghi video và phát sóng trực tiếp dựa trên nginx.

Bạn có thể đọc về chính mô-đun trên trang GitHub của nó, nhưng tôi muốn đưa ra một vài ví dụ sử dụng đơn giản. Mình hi vọng topic sẽ giúp ích cho những người mới bước chân vào lĩnh vực kinh doanh video (như mình).

Sơ lược về RTMP

RTMP (Giao thức nhắn tin thời gian thực) là một giao thức phát sóng độc quyền của Adobe. Phương tiện truyền tải mặc định là TCP (cổng 1935). Cũng có thể đóng gói RTMP thành HTTP (RTMPT). Máy khách RTMP chủ yếu là Adobe Flash Player.
Bộ giải mã video - H.264, codec âm thanh AAC, bộ chứa nellymoser hoặc MP3, MP4 hoặc FLV.

Đăng video

Nói cách khác, video theo yêu cầu (VOD). Chỉ cần thêm vào nginx.conf trong phần rtmp (máy chủ (…)).
vod ứng dụng (play / var / videos;)

(Lưu ý: tất nhiên, phần này không phải được gọi là vod)
Giờ đây, bạn có thể đặt tệp video ở định dạng chính xác vào thư mục / var / videos và “cấp” nguồn cho trình phát, ví dụ: rtmp: //server/vod/file.flv. Theo như tôi hiểu, MP4 nguyên bản hỗ trợ tua video, trong khi FLV sẽ phải được lập chỉ mục riêng.

Bản dịch trực tuyến

Chúng tôi có thể gửi luồng video và âm thanh đến máy chủ bằng cách sử dụng cùng một giao thức RTMP để xuất bản. Và khách hàng của chúng tôi sẽ có thể xem chương trình phát sóng. Để thực hiện việc này, bạn cần thêm một phần trên máy chủ:

Ứng dụng hoạt động (cho phép xuất bản 1.2.3.4; cho phép xuất bản 192.168.0.0/24; từ chối xuất bản tất cả; cho phép phát tất cả; phát trực tiếp;)

Trên máy mà chúng ta sẽ phát, trước tiên chúng ta cần lấy danh sách các thiết bị DirectShow. Start - Run - cmd, vào thư mục ffmpeg / bin và chạy:
ffmpeg -list_devices true -f dshow -i dummy

Nếu có các chữ cái tiếng Nga trong tên nguồn của bạn, thì chúng có thể được hiển thị dưới dạng krakozyabry. Các quản trị viên chân chính sử dụng iconv và những người đơn giản như tôi sẽ giải mã lỗi trên trang của Lebedev. FFmpeg "bạn cần cung cấp một dòng chữ có thể đọc được.

Bây giờ, khi biết tên của nguồn video và âm thanh, chúng ta có thể chụp nó bằng ffmpeg và gửi nó đến máy chủ.

Webcam

Tối thiểu, bạn cần chỉ định nguồn video, codec và máy chủ:
ffmpeg -f dshow -i video = "Webcam C170" -c: v libx264 -an -f flv "rtmp: //1.2.3.4/live/test.flv live = 1"

Thay vì "Webcam C170", bạn cần thay thế tên máy ảnh của mình trong danh sách.
Công tắc -an cho biết rằng chúng tôi không truyền một luồng âm thanh. Nếu cần một luồng âm thanh, thì dòng khởi chạy sẽ trông giống như sau:
ffmpeg -f dshow -i video = "Webcam C170" -f dshow -i audio = "Micrô ..." -c: v libx264 -c: a libfaac -ar 44100 -ac 2 -f flv "rtmp: //1.2 .3.4 / live / test.flv live = 1 "
Ở đây chúng tôi đang sử dụng codec libfaac, tỷ lệ mẫu 44100, 2 kênh (âm thanh nổi). Bạn có thể sử dụng MP3 thay vì AAC (codec libmp3lame).

camera analog

Nếu máy ảnh của bạn có đầu ra analog, bạn có thể kết nối nó với máy tính bằng thiết bị chụp. Tôi sử dụng một máy ảnh PAL giá rẻ và một bảng chụp USB Dealextreme.

Ffmpeg -r pal -s pal -f dshow -i video = "USB2.0 ATV" -c: v libx264 -an -f flv "rtmp: //1.2.3.4/live/test.flv live = 1"

Chụp màn hình

Có hai lựa chọn ở đây: cài đặt FFSplit hoặc sử dụng trình ghi màn hình với FFmpeg.
FFSplit dễ sử dụng hơn vì nó có một GUI đẹp, nhưng nó không hoạt động trong XP / 2003.

Nếu bạn quyết định chọn cách thứ hai, thì đường khởi chạy FFmpeg sẽ giống như sau:
ffmpeg -f dshow -i video = "screen-capture-recorder" -c: v libx264 -an -r 2 -f flv "rtmp: //1.2.3.4/live/test.flv live = 1"
Một luồng âm thanh có thể được ghi lại bằng trình thu âm thanh ảo.


Ví dụ về chụp màn hình trong ứng dụng

tiếp sức

Đương nhiên, bạn có thể chuyển tiếp một tệp video hoặc âm thanh FFmpeg (hoặc luồng) tới máy chủ. Trong ví dụ dưới đây, chúng tôi đang truyền video MJPEG từ một máy ảnh từ xa:
ffmpeg -f mjpeg -i video = "http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c: v libx264 -f flv "rtmp: //1.2.3.4/live/test.flv trực tiếp = 1 "
Nhưng với những mục đích như vậy, sẽ hợp lý hơn nếu sử dụng tùy chọn đẩy trên chính máy chủ RTMP để loại bỏ liên kết trung gian và kéo luồng trên chính máy chủ.


Một số loại webcam ở Nhật Bản

Điều chỉnh, giải quyết vấn đề

-tên đặt trước H.264 có một số bộ cài đặt tỷ lệ nén / tốc độ: cực nhanh, siêu nhanh, rất nhanh, nhanh hơn, nhanh, trung bình, chậm, chậm hơn, rất chậm. Vì vậy, nếu bạn muốn cải thiện hiệu suất, bạn nên sử dụng:
-đặt trước cực nhanh
-crf con số ảnh hưởng trực tiếp đến tốc độ bit và chất lượng. Nó nhận các giá trị từ 0 đến 51 - càng nhiều, chất lượng hình ảnh càng thấp. Mặc định 23, 18 - chất lượng không mất dữ liệu. Tốc độ bit tăng gấp đôi khi CRF giảm 6.

-r con số đặt FPS đầu vào và đầu ra. Đối với các nguồn mà bạn đang chụp ảnh, bạn có thể đặt -r để thay thế -lạiđể sử dụng FPS gốc.

-rtbufsize con số kích thước bộ đệm thời gian thực. Nếu bạn tiếp tục nhận được tràn bộ đệm và khung bị giảm, bạn có thể đặt bộ đệm lớn (ví dụ: 100000k), nhưng điều này có thể làm tăng độ trễ truyền.

-pix_fmt thiết lập mô hình màu. Nếu bạn có hình vuông màu đen thay vì hình ảnh và âm thanh hoạt động, hãy thử đặt yuv420p hoặc yuv422p.

-S chiều rộng x chiều cao kích thước hình ảnh đầu vào và đầu ra.

-g con số Theo như tôi hiểu, đây là số khung hình tối đa giữa các khung hình chính. Nếu FPS của bạn rất thấp, thì bạn có thể đặt giá trị này thấp hơn để giảm độ trễ khi bắt đầu phát sóng.

-keyint_min con số số lượng khung hình tối thiểu giữa các khung hình chính.

-vf "crop = w: h: x: y" cắt video

-tune không độ trễ tùy chọn "ma thuật" để giảm độ trễ phát sóng. Tôi không thể tìm ra chính xác nó làm gì ...

-khoảng thời gian phân tích 0 tắt phân tích thời lượng, giúp giảm độ trễ phát sóng

Ngoài các tùy chọn âm thanh được thảo luận ở trên, bạn có thể cần -các bản sao giải mã trong trường hợp luồng âm thanh của bạn không yêu cầu chuyển đổi bổ sung sang MP3 / AAC.

Ví dụ: phát sóng từ webcam với độ trễ thấp mà không có âm thanh, vẽ thời gian hiện tại ở đầu hình ảnh

Ffmpeg -r 25 -rtbufsize 1000000k -analyzeduration 0 -s vga -copyts -f dshow -i video = "Webcam C170" -vf "drawtext = fontfile = verdana.ttf: [email được bảo vệ]: fontize = 48: box = 1: [email được bảo vệ]: text =% (localtime) "-s 320x240 -c: v libx264 -g 10 -keyint_min 1 -preset UltraFast -tune zerolatency -crf 25 -an -r 3 -f flv" rtmp: //1.2.3.4: 1935 / live / b.flv live = 1 "

Trình phát trên trang web

Mọi thứ đều đơn giản ở đây. Cài đặt một trong những trình phát phổ biến trên trang web của bạn, chẳng hạn

Phát trực tiếp video là một điều thực sự quan trọng. Điều gì có thể dễ dàng hơn là chạy ngay ứng dụng phát trực tiếp trên điện thoại thông minh của bạn? Nó sẽ truyền trực tiếp cho bạn hoặc một sự kiện đang diễn ra xung quanh bạn… Và trong khi bạn đang phát trực tuyến video, bạn bè của bạn sẽ xem video đó từ thiết bị di động của họ. Và tất cả những gì bạn cần để điều đó xảy ra là máy ảnh và micrô tích hợp trên điện thoại thông minh của bạn… Điều này có thú vị không?

Phát trực tiếp đã giới thiệu một cách khác để người dùng kết nối với bạn bè của họ và để các thương hiệu tương tác và tiếp cận với khách hàng của họ.

Nhưng làm cách nào để doanh nghiệp hoặc công ty khởi nghiệp của bạn có thể dễ dàng triển khai tính năng phát trực tiếp cho Android mà không cần dành nhiều tài nguyên và thời gian làm việc của các nhà phát triển để làm điều đó? Công nghệ nào đứng đằng sau phát sóng trực tiếp và biến nó thành hiện thực?

Hãy đi sâu vào chủ đề để tìm câu trả lời toàn diện cho những câu hỏi này và cũng tìm hiểu thêm về các giải pháp sẵn sàng sử dụng để hỗ trợ và tăng tốc quá trình thêm tính năng phát video trực tiếp vào ứng dụng của bạn.

Các đặc điểm của phát trực tiếp là gì

Không giống như định dạng video theo yêu cầu giả định rằng người dùng có thể chọn và xem video bất kỳ lúc nào, video phát trực tiếp gắn liền với một thời điểm cụ thể trong thời gian vàđược hiển thị trong khi được ghi lại.

Và đây là cách quá trình phát trực tiếp trông như thế nào. Cả video và âm thanh đều được chuyển qua các tin nhắn mà trình phát video và máy chủ phương tiện trao đổi. Đầu tiên, trình phát video kết nối với máy chủ đa phương tiện. Máy chủ chuyển một phần video tới trình phát. Đoạn video này tương ứng với thời gian phát hiện tại. Khoảng đệm vài giây đảm bảo phát lại video mà không bị trễ hoặc gián đoạn. Quá trình này được lặp lại liên tục trong suốt thời gian truyền phát trên web kéo dài.

Nhưng phát trực tiếp không bao giờ truyền toàn bộ các tệp phương tiện (do đó tiết kiệm băng thông). Thay vào đó, nó được kích hoạt thông qua các máy chủ phương tiện chịu trách nhiệm truyền và phát trực tuyến video, âm thanh và dữ liệu kỹ thuật số. Tính năng phát trực tiếp cung cấp khả năng bảo vệ các tệp video nguồn vì chúng không thể bị sao chép vào máy tính của người xem. Với sự trợ giúp của phần mềm bổ sung, tính năng phát trực tiếp cũng hỗ trợ trò chuyện trực tiếp và hỏi đáp.

Không chỉ có một định dạng duy nhất tồn tại để truyền dữ liệu phương tiện. Thay vào đó, bạn có thể chọn một trong những phù hợp với nhu cầu kỹ thuật của bạn nhất.

Những công nghệ phát trực tuyến video nào tồn tại?

Có nhiều cách để bật phát trực tiếp trong ứng dụng của bạn. Chúng tôi sẽ tổng quan ngắn gọn về các công nghệ hiện có bên dưới. Bằng cách này, bạn sẽ có thể phân biệt các tính năng chính của chúng và loại nội dung mà chúng được tạo ra để phân phối tốt nhất:

  • Giao thức RTMP

Giao thức nhắn tin thời gian thực (hoặc chỉ RTMP) được phát triển để truyền hiệu suất cao các luồng video và âm thanh cũng như thông điệp dữ liệu thời gian thực qua web. Tính năng phát trực tuyến theo thời gian thực được bật bằng cách thiết lập kết nối hai chiều giữa máy chủ Flash và trình phát Flash.

Adobe Flash Player là ứng dụng khách RTMP phổ biến nhất hỗ trợ phát lại video và âm thanh. Nó hiện có sẵn dưới dạng thông số kỹ thuật nguồn mở để phát triển các sản phẩm và công nghệ cung cấp các luồng video ở các định dạng AMF, SWF, FLV và F4V (tương thích với các định dạng Adobe Flash Player) và âm thanh ở AAC và MP3.

  • Giao thức phát trực tuyến dựa trên HTTP (HLS và HDS)

Định dạng HLS dựa trên MPEG2-TS và liên quan đến truyền trực tuyến đến các thiết bị iOS. Nó không phải là một phần của HTML5. HLS kết hợp nhiều luồng với thông tin siêu dữ liệu và dễ dàng chuyển đổi giữa các dữ liệu phương tiện khác nhau.

HDS sử dụng định dạng của Adobe cho video và phân phối các đoạn tệp MPEG-4. Định dạng MPEG cho phép lưu trữ siêu dữ liệu và các luồng âm thanh và video ở các vị trí khác nhau. HTTP Dynamic Streaming là một công nghệ tiện lợi cho các thư viện phương tiện lớn. Nó giúp giảm băng thông, tiết kiệm pin và mang lại trải nghiệm người dùng tốt hơn so với HLS.

  • Giao thức phát trực tuyến Silverlight

Định dạng phát trực tuyến video này được sử dụng cho các ứng dụng Internet phong phú như Adobe Flash và để chạy phim. Mặc dù Microsoft Silverlight không còn hoạt động trong trình duyệt Chrome nhưng nó vẫn có sẵn trong Internet Explorer và Mozilla Firefox.

  • MPEG-DASH

MPEG-DASH cung cấp phát trực tiếp video theo yêu cầu và chất lượng cao cho các phương tiện đến từ các máy chủ HTTP. Định dạng cho phép thêm quảng cáo vào giữa các phân đoạn video cho cả hai loại phát trực tuyến. Nội dung phương tiện được mã hóa một lần và chuyển đến máy khách với sự trợ giúp của các chương trình DRM (Quản lý quyền kỹ thuật số) khác nhau.

  • phát trực tuyến tải xuống liên tục

Với tính năng tải xuống liên tục, nội dung phương tiện được chuyển từ máy chủ sang máy khách thông qua giao thức HTTP. Nó không yêu cầu bất kỳ máy chủ phát trực tuyến nào để lưu trữ tệp hoặc tải xuống tệp phương tiện để xem nó. Tải xuống liên tục cho phép phát lại video trước khi tải xuống video hoàn chỉnh.

Sự gia tăng của video 4K, kỳ vọng của người dùng cao về tiêu chuẩn chất lượng và trải nghiệm mượt mà, sự phát triển của các nền tảng hiệu quả mới và kết nối Internet nhanh hơn khiến nhu cầu đối với các định dạng phát trực tuyến video ngày càng khắt khe hơn. Bất kể có nhiều công nghệ khác nhau, chúng tôi sẽ tập trung vào RTMP như một trong những giao thức phát trực tuyến phổ biến và được các nhà phát triển yêu thích nhất.

Vậy, giao thức RTMP là gì và tại sao nó lại tốt như vậy

Được tạo bởi Macromedia (hiện tại là Adobe), Giao thức nhắn tin thời gian thực đảm bảo truyền trực tuyến tốc độ bit thích ứng (ABS). Khi băng thông thay đổi, chất lượng video sẽ tự động điều chỉnh theo đó. RTMP dựa trên Giao thức điều khiển truyền (TCP), ưu tiên duy trì kết nối ổn định và độ trễ thấp. Về loại nội dung, RTMP cho phép truyền cả dữ liệu phương tiện truyền thông và thông tin văn bản được ghi trước và ghi trực tiếp.

Hơn nữa, RTMP không chỉ có thể được sử dụng để phát trực tuyến trên thiết bị di động. Máy chủ RTMP có thể gửi dữ liệu đa phương tiện tới các ứng dụng web cũng như các thiết bị di động.

Nó thường được ca ngợi vì những ưu điểm sau mà nó cung cấp:

  • Nó được tối ưu hóa đặc biệt để phát trực tiếp

Lợi ích lớn nhất mà RTMP cung cấp là tối ưu hóa việc truyền dữ liệu video và âm thanh. Đối với phát trực tuyến, nó sử dụng cổng 1935 độc quyền phù hợp để truyền tải nội dung có độ trễ thấp, điều quan trọng đối với phát trực tiếp và không yêu cầu bộ đệm.

  • Nó là một công nghệ trưởng thành

RTMP đã được sử dụng để phát trực tiếp trong hơn 10 năm. Đối với một nhà phát triển, việc thiết lập RTMP Server là một nhiệm vụ dễ dàng. Đối với người dùng, tính năng phát trực tuyến video được bật cùng lúc ở các định dạng khác nhau. Các tính năng bảo mật như xác minh người chơi cũng được áp dụng.

  • Bạn có thể xem bất kỳ phần nào của video đang được phát sóng

Tất cả các máy chủ RTMP đều cho phép ghi lại các luồng phương tiện đến và cung cấp khả năng hiển thị video ngay từ đầu. Người dùng có thể bỏ qua các phần của video cho đến thời điểm hiện tại trong chương trình phát sóng. Tính năng này đặc biệt hữu ích cho các video dài (hơn 10 phút), cho phép dễ dàng chuyển sang bất kỳ phần nào của nó.

  • Đây là giao thức phát trực tuyến thời gian thực phổ biến nhất

RTMP là một giao thức độc lập với nền tảng, không yêu cầu phụ thuộc vào phần cứng và tương thích với Windows, Mac, Linux, Android, iOS và Windows mobile. Nó cũng được sử dụng rộng rãi trong các thiết bị chơi game, chẳng hạn như PlayStation, Xbox One và PS Vita.

Cách RTMP hoạt động

Nói một cách đơn giản, luồng RTMP bao gồm ba thực thể sau:

  • Máy khách tạo luồng phương tiện và truyền phát bằng giao thức RTMP tới máy chủ. Với tư cách là “nhà xuất bản” khách hàng, bạn có thể sử dụng nhiều ứng dụng trên các nền tảng khác nhau, chẳng hạn như trình phát dựa trên FFMPEG, VLC Player, ứng dụng YouTube và giải pháp dựa trên AVLib.
  • Một máy chủ xử lý luồng đến và thực hiện xử lý và ghi lại khi cần thiết. Máy chủ cũng cung cấp các chương trình phát sóng cho các máy khách khác. Trong số các máy chủ, các tùy chọn tốt nhất sẽ là Wowza Media Server, Flussonic Media Server và Simple RTMP Server.
  • Người xem đại diện cho bất kỳ khách hàng nào có thể xem các luồng đã xuất bản. Để hiển thị các luồng phương tiện như vậy, bạn có thể sử dụng bất kỳ trình phát nào hỗ trợ giao thức RTMP. Tin tốt là hầu hết tất cả các trình phát hiện được sử dụng cho tất cả các nền tảng hiện có đều hỗ trợ các luồng RTMP. Bạn có thể chọn Flash Player, VLC hoặc Media Player Classic.

Các ứng dụng phức tạp và tốn nhiều tài nguyên nhất là các ứng dụng truyền hình. 'Luồng phát sóng' bao gồm xử lý phương tiện, mã hóa và phát trực tiếp hơn nữa qua giao thức RTMP tới máy chủ. Nó phụ thuộc đáng kể vào một nền tảng và phần cứng và yêu cầu nhiều tài nguyên hỗ trợ.

Để truyền nhiều dữ liệu nhất có thể với giao thức RTMP, video và âm thanh được chia thành các đoạn có kích thước khác nhau. Kích thước mặc định là 64 byte cho âm thanh và 128 byte cho video. Kích thước đoạn video được xác định bởi định dạng tương tác giữa người dùng và máy chủ.

Các mảnh phương tiện sau đó được xen kẽ và ghép kênh qua một kết nối duy nhất trong khi tương quan với băng thông và độ trễ của kênh. Luồng đi từ đài truyền hình đến máy chủ bao gồm các khối dữ liệu nhỏ bao gồm các loại dữ liệu khác nhau (tức là dịch vụ video, âm thanh, v.v.). Truyền trực tuyến RTMP có thể đồng thời truyền một số khối dữ liệu khác nhau, do đó đóng gói cả video và âm thanh và cho phép các cuộc gọi thủ tục từ xa.

Khi máy khách mở luồng trong trình phát RTMP, một yêu cầu sẽ được gửi đến Máy chủ RTMP. Một phiên được khởi tạo và quá trình trao đổi dữ liệu dịch vụ xảy ra. Khi trình phát RTMP của máy khách nhận được phần cần thiết của gói dữ liệu dịch vụ về luồng đang diễn ra, nó sẽ bắt đầu giải mã, lưu vào bộ đệm và hiển thị luồng phương tiện RTMP.

Với RTMP, phương tiện không bắt buộc phải được lưu trữ trong bất kỳ bộ lưu trữ tạm thời nào. Nó tiếp tục truyền trực tiếp giữa các máy khách và máy chủ. Nếu dung lượng băng thông cho phép, cùng một luồng sẽ được chuyển đến nhiều máy khách gửi yêu cầu. Khả năng phát trực tuyến được cải thiện nếu một số máy chủ phương tiện được đưa vào một mạng. Quá trình phát trực tuyến tiếp tục cho đến khi máy chủ hoặc trình phát kết thúc phiên.

Làm cách nào bạn có thể sử dụng RTMP để phát video trong ứng dụng Android của mình?

Bạn có thể xem luồng RTMP trên bất kỳ nền tảng nào với sự trợ giúp của bất kỳ trình phát nào hỗ trợ giao thức RTMP. Đối với Android, trình phát của bên thứ ba phổ biến nhất là Trình phát MX, VLC và BS cũng như bất kỳ trình phát nào khác hỗ trợ FFMPEG. Để xem RTMP từ bên trong ứng dụng, nhà phát triển cần tích hợp bất kỳ thư viện trình phát nào có thể đọc các luồng RTMP. Đây là ijkPlayer và VLC SDK.

Nhóm Onix đã đóng góp công nghệ của họ trong việc tìm ra giải pháp dễ dàng và đẹp mắt để phát trực tuyến video và đã tạo AVLib, thư viện bên ngoài của riêng Onix để phát trực tuyến Android RTMP.

Hãy xem nó hoạt động như thế nào với chương trình phát sóng trực tiếp cho các ứng dụng Android và ý tưởng bắt nguồn như thế nào.

Cách AVLib giải quyết vấn đề cơ bản để phát trực tuyến Android RTMP

https://rtmplib-android.com/

Nhóm các nhà phát triển Android của chúng tôi đã đưa ra ý tưởng về AVLib gần như vô tình, nhưng với một kết quả và hiệu quả tuyệt vời. Trong khi thực hiện nhiệm vụ thêm tính năng phát video và âm thanh cho thiết bị Android lên máy chủ RTMP, họ đã gặp phải một sự cố nghiêm trọng. Yêu cầu của khách hàng nêu rõ rằng ứng dụng phải có thể phát trực tuyến dữ liệu âm thanh và video ở dung lượng tối đa thông qua camera Android. Cũng cần bật hỗ trợ Android 4.0 như phiên bản tối thiểu để người dùng có thiết bị di động cũ hơn có thể sử dụng nó và sở hữu một số cài đặt khả năng sử dụng thuận tiện cho người dùng.

Nhóm Onix đã tiến hành một nghiên cứu sâu và so sánh các thư viện phát trực tuyến mã nguồn mở và thương mại hiện có. Nhưng không có kết quả hài lòng. Hóa ra không có giải pháp tương tự nào trên thị trường có thể đáp ứng nhu cầu kỹ thuật của chúng tôi một cách hoàn chỉnh. Các thành viên trong nhóm nhanh chóng đi đến quyết định tạo thư viện bên ngoài của riêng họ có thể hỗ trợ phát trực tuyến RTMP cho Android. Và bởi vì có rất nhiều thiết bị Android và phiên bản hệ điều hành đang được sử dụng, nên thư viện này được xây dựng để hỗ trợ nhu cầu phát trực tuyến của tất cả người dùng Android hiện tại.

Nhưng sẽ không bao giờ có ý nghĩa nếu dành thời gian vào việc tạo ra một công cụ dùng một lần có thể giải quyết một công việc cụ thể một cách chặt chẽ ở mức độ cần thiết. Điều gì sẽ xảy ra nếu một tình huống tương tự lặp lại? Tại sao không sử dụng tốt nhất những gì công nghệ cung cấp và xây dựng một sản phẩm phần mềm đã được thử nghiệm tốt?

Chúng tôi dự định phát triển một giải pháp thanh lịch, linh hoạt và đơn giản, vì vậy bất kỳ nhóm Android bên thứ ba nào khác hoặc nhà phát triển đang tìm kiếm thư viện RTMP đều có thể dễ dàng tích hợp nó vào một ứng dụng mà không cần phải phát minh lại bánh xe. Và chúng tôi đã làm được! AVLib kết hợp tất cả các tính năng mà chúng tôi mong đợi và giải quyết toàn diện nhiệm vụ cơ bản của chương trình phát video.

AVLib được phát triển như thế nào và tại sao nó là một thư viện RTMP đáng tin cậy

AVLib là một thư viện RTMP mà chúng tôi thực sự tự hào. Nó là một sản phẩm phần mềm giải quyết các yêu cầu của khách hàng về phát trực tiếp ở bất kỳ mức độ phức tạp nào. Đây là một công cụ sẵn sàng sử dụng cho Android Studio được tích hợp ngay vào ứng dụng dành cho thiết bị di động.

AVLib đại diện cho một giải pháp thuận tiện và ổn định dựa trên các nguyên tắc sau:

  • Tích hợp dễ dàng với ứng dụng

Đối với một nhà phát triển Android, sẽ mất khoảng một giờ để hoàn thành việc quá trình tích hợp AVLib và thêm tính năng phát trực tiếp vào một ứng dụng.

  • công suất tối đa

Để triển khai thư viện RTMP và trao quyền cho nó với tiềm năng dung lượng cao, nhóm chúng tôi đã chọn ngôn ngữ lập trình C. Mọi chức năng đơn lẻ được đưa vào AVLib, bắt đầu từ logic băng tải, mã hóa, làm việc với RTMP và cho đến quá trình xử lý, đều được xây dựng bằng C thuần túy.

  • Thư viện tùy chỉnh giao diện người dùng

AVLib linh hoạt và có thể dễ dàng điều chỉnh theo nhu cầu của khách hàng trong thiết kế giao diện người dùng (tức là các nút, văn bản) và cài đặt video (tức là độ phân giải khung hình, âm thanh, chất lượng codec, tốc độ bit).

  • Hỗ trợ tất cả các loại thiết bị Android hiện có

Thư viện RTMP này là một tệp .aar không có phụ thuộc. AVLib đã được thử nghiệm để đảm bảo rằng nó tương thích với nhiều thiết bị Android khác nhau và hỗ trợ hệ điều hành Android phiên bản 4.0 trở lên.

Bạn có thể tìm thêm chi tiết về các tính năng của AVLib.

Quá trình phát triển của AVLib thực sự đầy thách thức và đòi hỏi sự suy nghĩ và nỗ lực từ nhóm Android của chúng tôi.

  • Phát trực tiếp từ camera hành động? Đúng!

Một trong những tính năng đặc biệt của AVLib là khả năng truyền phát video và âm thanh từ các camera hành động một cách nhanh chóng. Để kích hoạt tính năng này, bạn cần phải làm việc đồng thời với hai giao diện mạng ở phía bên của mô-đun C. Nhiệm vụ đã hoàn thành thành công nhưng yêu cầu nghiên cứu kỹ lưỡng về mã nguồn của hệ điều hành Android và gỡ lỗi liên tục.

  • Xây dựng vòng đời phát sóng

Một thách thức quan trọng khác mà chúng tôi gặp phải trong giai đoạn phát triển là cho phép làm việc trơn tru với máy ảnh và xử lý vòng đời trên các thiết bị khác nhau. Điều đó khá tốn thời gian và đòi hỏi nhiều công việc xem xét kỹ lưỡng.