You are on page 1of 6

RTSP TO WEB

I. User
1. Add Group
 Chỉ SuperUser mới được Add Group
 Group ID, Group Name của từng bản ghi trong mongoDB sẽ
không được trùng nhau
2. Add Role
3. Add User
4. Login
II. Stream
 RTSP (real time streaming protocol): là giao thức truyền phát thời gian thực.
Bằng cách giao tiếp trực tiếp với máy chủ truyền dữ liệu, RTSP giúp truyền
dữ liệu thời gian thực từ đa phương tiện sang thiết bị đầu cuối.
 RTMP: Real Time Messaging Protocol, dựa trên giao thức điều khiển TCP.
RTMP an toàn, có thể truyền phát âm thanh, video và văn bản trong bất kì
trình duyệt web nào tương thích với Flash
 RTSP: Real Time Streaming Protocol, là giao thức phát trực tuyến thời gian
thực. Máy chủ RTSP nằm giữa người phát và người xem, đưa ra các lệnh
“phát”, “ghi”, “tạm dừng”. RTSP sử dụng 2 phương thức TCP và UDP. TCP
phát hành và nhận các lệnh điều khiển của luồng trong khi UDP cung cấp
âm thanh, video và dữ liệu
 WebRTC: cho phép giao tiếp video, âm thanh thời gian thực bên trong trang
web
 HLS: HTTP Live Streaming: là một giao thức truyền phát đa phương tiện để
cung cấp phương tiện hình ảnh và âm thanh cho người xem qua Internet.
 Quy trình hoạt động:
1. Các thiết bị chụp (máy ảnh,...) ghi lại nội dung
2. Nội dung được gửi đến bộ mã hóa video trực tiếp từ thiết bị
chụp
3. Bộ mã hóa truyền nội dung đến nền tảng lưu trữ video thông
qua HTTP
4. Nền tảng lưu trữ video sử dụng HLS để truyền nội dung đến
trình phát video HTML5
 Tổng quan kỹ thuật
1. Giao thức HLS cắt video thành các đoạn ngắn (khoảng 10s)
2. Tiếp theo, một máy chủ HTTP lưu trữ cái luồng đó và HTTP
cung cấp video ngắn này cho người xem trên thiết bị của họ
3. HTTP cũng tạo 1 tệp kê khai đóng vai trò là chỉ mục cho các
đoạn video
 MSE: Media Source Extensions là tiện ích mở rộng nguồn phương tiện cho
phép bạn tạo các luồng để phát lại từ các phân đoạn âm thanh hoặc video.
MSE là cần thiết nếu bạn thực hiện các việc: dịch chuyển thời gian, phát trực
tuyến thích ứng, ghép nối thích ứng và kiểm soát hiệu suất
 Codec: là một công cụ mã hóa xử lý video và lưu trữ nó trong một luồng
byte. Codec sử dụng thuật toán để thu nhỏ kích cỡ file âm thanh hoặc video
một cách hiệu quả sau đó giải nén khi cần thiết.
 runLock: kiểm tra xem stream có đang phát hay không
 on demand: chế độ phát trực tiếp tĩnh-false (chạy bất kì lúc nào) hoặc theo
yêu cầu-true (chỉ chạy khi có người xem)
 status “500” internal server error
1. HTTPAPISeverStream
 Mutex
Go cho phép người dùng xây dựng các chương trình chạy đồng thời với
nhau. Tuy nhiên với sự đồng thời này, chương trình có thể bị nhảy vào “cuộc
đua dữ liệu”. Mutex sẽ giải quyết vấn đề này.
 Sheriff
Tương tự như json.Marshal, tuy nhiên Sheriff.Marshal có thể mã hóa dữ liệu
thành dạng Json với phiên bản API và thẻ nhóm (group)

Hàm này mã hóa dữ liệu thành dạng JSON sử dụng thư viện Sheriff. Dữ liệu ở đây
bao gồm (Name và ChannelST) với điều kiện các dữ liệu này phải có thẻ nhóm
(group) là “api”

 IndentedJSON
Là hàm hiển thị dữ liệu với dấu cách thụt lề, có endlines. Điều này làm cho
nó dễ đọc hơn
Sau khi mã hóa dữ liệu streamlist, hàm này sẽ trả về tin nhắn (trạng thái 0,
payload: error) nếu có xuất hiện lỗi hoặc trả về tin nhắn (trạng thái 1, payload: dữ
liệu mới được mã hóa) nếu không có lỗi
 Hàm thực hiện quá trình mã hóa dữ liệu thành dạng JSON
2. HTTPAPISeverStreamAdd
 BindJSON
Liên kết nội dung yêu cầu JSON (có thể do người dùng nhập) với cấu trúc
được chỉ ra trong hàm
Hàm này lấy dữ liệu người dùng nhập (info stream) để liên kết với cấu trúc của
struct StreamST. Nếu xảy ra lỗi sẽ thực hiện câu lệnh IntendedJSON, ghi nhật kí và
thoát hàm. Nếu không lỗi sẽ thực hiện quá trình thêm stream
 StreamAdd (uuid và val (payload người dùng đã nhập) )
o Nếu StreamST rỗng: tạo một map mới với kiểu dữ liệu là map
StreamST, key và value thuộc struct StreamST
o Nếu StreamST có khóa là uuid: in ra lỗi Stream đã tồn tại
Hàm tạo ra 2 index i và value i2 lặp lại từng giá trị của struct val
Value i2 sẽ đượchaf cập nhật qua hàm StreamChannelMake
o StreamChannelMake (value i2)
 Thực hiện gộp (merge) biến channel (channelDefault) với
i2, giá trị mới được lưu trong biến channel giúp bỏ qua
cái giá trị đã được thiết lập trong default.
 Nếu xảy ra lỗi sẽ ghi biến channel bằng i2 và ghi lại nhật

 Nếu không xảy ra lỗi, thực hiện tạo mới các giá trị của
client’s, last ack, hls buffer và signals buffer chain
Khi thực hiện cập nhật đến giá trị i2.OnDemand, kiểm tra xem giá trị này có
bằng false hay không (chế độ phát trực tiếp tĩnh). Nếu bằng false, sẽ tạo một
goroutine mới là hàm StreamSeverRunStreamDo
o StreamSeverRunStreamDo (streamID (uuid) và channelID
(index i))
 Hàm có tác dụng xử lý lỗi và ghi nhật ký
 Thực hiện ghi nhật ký
 Tạo một biến opt mới có giá trị lấy từ hàm
StreamChannelControl (key (streamID) và channelID
(channelID). Hàm này giúp kiểm tra xem trong struct
StreamST đã tồn tại key chưa và ChannelST đã tồn tại
channelID chưa. Nếu cả 2 cùng tồn tại rồi, hàm sẽ trả về
channelTmp là 1 struct chứa giá trị của key và
channelID. Nếu chưa hàm sẽ trả về 1 error
 Kiểm tra giá trị AND của opt.OnDemand và giá trị đảo
của hàm ClientHas (hàm tương tự StreamChannelControl
tuy nhiên chỉ trả về true or false). Nếu đúng thì ghi nhật

 Status có giá trị từ hàm StreamSeverRunStream
StreamSeverRunStream (streamID, channelID và
opt)
 Nếu status>0 hoặc err != nil thì sẽ ghi nhật ký và báo lỗi
Thêm cấu trúc val vào struct Streams với key là uuid.
Kiểm tra lỗi khi gọi hàm SaveConfig
Kiểm tra lỗi sau khi gọi hàm StreamAdd. Nếu có lỗi xảy ra thì gửi message và ghi
nhật ký.
Nếu không có lỗi, gửi message thành công với câu lệnh IndentedJSON
 Hàm này thực hiện lấy thông tin người dùng nhập, gộp với thông default và
kiểm tra xem thông tin đã tồn tại trong hệ thống chưa
3. HTTPAPIServerStreamEdit
Cấu trúc tương tự như API trên, tuy nhiên thay hàm StreamAdd thành hàm
StreamEdit.
 StreamEdit (uuid, val)
Bởi vì là chỉnh sửa Stream đã có từ trước, do đó cần kiểm tra xem Stream có
tồn tại trong hệ thống không qua key uuid.
Nếu có:
o Tạo i và i2 lặp lại struct ChannelST
o Nếu i2.runLock là true thì dừng stream lại
o Tạo i3 và i4 tương tự như i và i2 của API trên (tức là thực hiện
gộp với default)
o Return nil
Nếu không: trả về 1 error
Các phần còn lại tương tự như trên
 Thực hiện chỉnh sửa stream qua uuid
4. HTTPAPIServerStreamDelete
Kiểm tra lỗi khi gọi hàm StreamDelete
 StreamDelete (uuid): kiểm tra uuid có tồn tại từ trước không, sau đó
sẽ xóa Streams theo uuid nếu uuid có tồn tại
 Sau khi kiểm tra thấy uuid tồn tại, kiểm tra xem stream có đang chạy
hay không, nếu có (runLock==true) thì dừng stream lại
Nếu có lỗi, thực hiện báo lỗi, ghi nhật ký.
Nếu không thì thông báo thành công
 Thực hiện xóa stream qua uuid
5. HTTPAPIServerStreamReload
Kiểm tra lỗi khi gọi hàm StreamReload
 StreamReload (uuid): kiểm tra uuid có tồn tại từ trước không, sau đó
tạo i và i2 lặp lại struct ChannelST
o Nếu i2.runLock có kết quả là true, tức là stream đang chạy, ta
gọi hàm restart
o Nếu không, trả về 1 error
Nếu có lỗi hoặc không có lỗi, thực hiện như trên
 Thực hiện tải lại stream thông qua uuid
6. HTTPAPIServerStreamInfo
Trả về giá trị info và err khi gọi hàm StreamInfo
 StreamInfo: kiểm tra uuid có tồn tại từ trước không. Nếu có thì lưu
vào tmp và thực hiện return. Nếu không thì in ra error
Nếu err!=nil, báo lỗi và ghi nhật ký
Nếu không in ra kết quả là thành công
 In thông tin stream qua uuid

You might also like