Hướng dẫn python audio streaming server - máy chủ phát trực tuyến âm thanh python
Lời mở đầuHôm nay trong lúc rảnh rỗi tôi ngồi tìm hiểu kỹ thuật streaming và áp dụng nó bằng Python. Bài viết có thể có thiếu sót mong các bạn thông cảm. Show Khái niệmStream là một kỹ thuật chuyển dữ liệu theo dòng ổn định và liên tục. Khái niệm này bắt đầu có từ năm 1920 khi George Owen Squier được cấp bằng sáng chế cho một hệ thống truyền tải và phân phối các tín hiệu qua đường dây điện. Đến năm 1990, thuật ngữ "Streaming" ra đời được mô tả là công cụ giúp truyền tải một cách nhanh chóng video tới người dùng. Tại thời điểm hiện tại, cùng với sự mở rộng và phát triển của Internet, stream trở nên ngày càng quan trọng hơn. Lấy ví dụ, mỗi tập tin bạn tải từ trình duyệt Chrome hoặc Firefox (download) đều sử dụng kỹ thuật stream hay các chương trình live video trên Youtube, Tweet, ... cũng đang sử dụng kỹ thuật stream. Nhưng đừng nhầm downloading và streaming, cái trước là tải dữ liệu về và lưu ở thiết bị của người dùng (có thể là mobile, laptop, pc, ...), cái sau truyển tải dữ liệu liên tục nhưng không lưu lại trong máy. Vậy kỹ thuật stream hoạt động ra sao ? Dưới góc nhìn người dùng, để live stream họ cần các công cụ sau:
Dưới góc nhìn develop:
Nhìn chung: Âm thanh stream được nén bằng cách sử dụng định dạng âm thanh như MP3, Vorbis, AAC. Hình ảnh video stream được nén bằng cách sử dụng codec video như H.264, H.265, VP8. Mã hóa âm thanh và video stream được nhúng trong một gói bitstream như FLV, WebM, ASF, ISMA, MP4. Một streaming server truyền Bitstream tới một streaming client bằng cách sử dụng một giao thức truyền tải, ví dụ như là MMS hoặc RTP. Các streaming client có thể tương tác với streaming server bằng cách sử dụng một giao thức kiểm soát, chẳng hạn như MMS hoặc RTSP. Giao thứcĐể truyền tải dữ liệu từ streaming server tới streaming client cần phải sử dụng giao thức truyền tải dữ liệu. Ở đây tôi sẽ liệt kê các giao thức đó, do không phải dân chuyên nên chắc chắn còn nhiều thiếu sót và không kỹ càng.
Còn nhiều giao thức nữa nhưng thôi tôi giới thiệu sơ qua thế này thôi do ngại viết dài . .Thư viện FFmpegMột dự án phần mềm mã nguồn mở, là một thư viện lớn, chứa nhiều chương trình xử lý video, âm thanh như ghi lại, chuyển đổi, phát trực tiếp, bla bla ... Một vài ví dụ sử dụng thư viện này, implement bởi Python và sử dụng thư viện (https://github.com/kkroening/ffmpeg-python) Stream from a local video to HTTP server
Muốn xem stream video này thì chạy trong terminal : 2Stream from RTSP server to TCP socket
Tensorflow Deep Dream StreamingMột ví dụ khá vui cho các bạn làm AI, biến stream output thành một bức tranh trừu tượng.
Hoặc có thể dùng luôn thư viện hỗ trợ stream bằng FFmpeg (https://github.com/aminyazdanpanah/python-ffmpeg-video-streaming). Ở đây tôi không đề cập đến do dài. Video Streaming với OpenCV và FlaskCác IP Camera đa phần có giao thức RTSP và không hỗ trợ trực tiếp trên trình duyệt nên cần thông qua một thư viện API, ở đây tôi dùng Flask. Đầu tiên import các thư viện cần thiết
Capture video bằng OpenCV
Sau khi capture video, tôi chuyển đổi các framte thành bytes để generate lên trình duyệt
Để show lên trình duyệt, tôi cần thiết lập một router nối tới trang html. Đầu tiên tôi cần một trang mặc định đã, thường là trang home khi mọi người nhập địa chỉ sẽ hiện lên.
Tiếp đấy cần một route chỉ hướng tới trang sẽ hiện các frame trên trình duyệt. Type ở đây để multipart hỗ trợ media.
Trong file 3, mặc định trống trơn, chỉ khi nào server gửi trả các frame thì mới hiện lên.
Chạy Flask app
Kết luậnTôi chỉ mới viết có nhiêu đây, chưa được đầy đủ và cũng chưa đi sâu. Nếu có thiếu sót, mong các bạn góp ý Referenceshttps://medium.com/datadriveninvestor/video-streaming-using-flask-and-opencv-c464bf8473d6 https://github.com/kkroening/ffmpeg-python https://github.com/aminyazdanpanah/python-ffmpeg-video-streaming https://www.wowza.com/blog/streaming-protocols |