FMUSER Truyền video và âm thanh không dây dễ dàng hơn!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Người Afrikaans
sq.fmuser.org -> Tiếng Albania
ar.fmuser.org -> tiếng Ả Rập
hy.fmuser.org -> Armenia
az.fmuser.org -> Azerbaijan
eu.fmuser.org -> Basque
be.fmuser.org -> Tiếng Belarus
bg.fmuser.org -> Tiếng Bulgaria
ca.fmuser.org -> Catalan
zh-CN.fmuser.org -> Tiếng Trung (Giản thể)
zh-TW.fmuser.org -> Trung Quốc (truyền thống)
hr.fmuser.org -> Tiếng Croatia
cs.fmuser.org -> Tiếng Séc
da.fmuser.org -> Đan Mạch
nl.fmuser.org -> Hà Lan
et.fmuser.org -> Tiếng Estonia
tl.fmuser.org -> Phi Luật Tân
fi.fmuser.org -> Phần Lan
fr.fmuser.org -> Pháp
gl.fmuser.org -> Galicia
ka.fmuser.org -> tiếng Georgia
de.fmuser.org -> Đức
el.fmuser.org -> Hy Lạp
ht.fmuser.org -> Tiếng Creole của Haiti
iw.fmuser.org -> Tiếng Do Thái
hi.fmuser.org -> Tiếng Hindi
hu.fmuser.org -> Hungary
is.fmuser.org -> tiếng Iceland
id.fmuser.org -> tiếng Indonesia
ga.fmuser.org -> Ailen
it.fmuser.org -> Ý
ja.fmuser.org -> Nhật Bản
ko.fmuser.org -> Hàn Quốc
lv.fmuser.org -> Tiếng Latvia
lt.fmuser.org -> Tiếng Litva
mk.fmuser.org -> Người Macedonian
ms.fmuser.org -> Mã Lai
mt.fmuser.org -> Maltese
no.fmuser.org -> Na Uy
fa.fmuser.org -> tiếng Ba Tư
pl.fmuser.org -> Tiếng Ba Lan
pt.fmuser.org -> tiếng Bồ Đào Nha
ro.fmuser.org -> Rumani
ru.fmuser.org -> tiếng Nga
sr.fmuser.org -> Tiếng Serbia
sk.fmuser.org -> Tiếng Slovak
sl.fmuser.org -> Tiếng Slovenia
es.fmuser.org -> tiếng Tây Ban Nha
sw.fmuser.org -> Tiếng Swahili
sv.fmuser.org -> Thụy Điển
th.fmuser.org -> Thái
tr.fmuser.org -> Thổ Nhĩ Kỳ
uk.fmuser.org -> Tiếng Ukraina
ur.fmuser.org -> Tiếng Urdu
vi.fmuser.org -> Tiếng việt
cy.fmuser.org -> tiếng Wales
yi.fmuser.org -> Yiddish
HLS và Http Live Streaming là các giao thức phát trực tuyến thời gian thực do Apple xác định. HLS được thực hiện dựa trên giao thức HTTP. Nội dung truyền bao gồm hai phần, một là tệp mô tả M3U8, hai là tệp phương tiện TS.
1. Tệp M3U8
Tệp phương tiện được mô tả dưới dạng văn bản, bao gồm một loạt các thẻ.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: Dòng đầu tiên của mỗi tệp M3U8 phải là thẻ này.
# EXT-X-TARGETDURATION: Chỉ định độ dài thời gian tối đa của đoạn phương tiện (giây). Khoảng thời gian được chỉ định trong #EXTINF phải nhỏ hơn hoặc bằng giá trị lớn nhất này. Giá trị này chỉ có thể xuất hiện một lần.
#EXTINF: Mô tả độ dài của một tệp phương tiện. Các tệp phương tiện theo sau, chẳng hạn như ./0.ts
2. tập tin ts
Tệp ts là tệp luồng truyền tải, định dạng mã hóa video chính là h264 / mpeg4 và âm thanh là acc / MP3.
Tập tin ts được chia thành ba lớp: ts layer Transport Stream, pes layer Packet Elemental Stream, es layer Elementary Stream. Lớp es là dữ liệu âm thanh và video, và lớp pes là thông tin mô tả khung dữ liệu, chẳng hạn như dấu thời gian được thêm vào dữ liệu âm thanh và video. Lớp ts là thêm thông tin cần thiết để nhận dạng và truyền luồng dữ liệu trong lớp pes
Lưu ý: Chi tiết như sau
(1) Lớp ts Kích thước gói ts được cố định ở mức 188 byte, và lớp ts được chia thành ba phần: tiêu đề ts, trường thích ứng và tải trọng. Tiêu đề ts được cố định ở 4 byte; trường thích ứng có thể tồn tại hoặc không, và chức năng chính của nó là điền dữ liệu nhỏ hơn 188 byte; trọng tải là dữ liệu pes.
tiêu đề ts
byte đồng bộ hóa sync_byte 8b, cố định ở 0x47
Transport_error_indicator 1b Chỉ báo lỗi truyền tải, cho biết rằng có một byte vô dụng sau trường thích ứng của tiêu đề ts, thường là 0, byte này được tính bằng độ dài của trường thích ứng
payload_unit_start_indicator 1b Chỉ báo bắt đầu đơn vị tải, được đánh dấu là 1 ở đầu gói dữ liệu hoàn chỉnh
Mức độ ưu tiên của phương tiện giao thông 1b Mức độ ưu tiên của phương tiện vận tải, 0 là mức độ ưu tiên thấp, 1 mức độ ưu tiên cao, thường là 0
pid giá trị pid 13b
Transport_scrambling_control 2b Điều khiển xáo trộn vận chuyển, 00 nghĩa là không được mã hóa
Adap_field_control 2b Có bao gồm trường thích ứng hay không, '00' được dành riêng; '01' có nghĩa là không có trường thích ứng, chỉ có tải trọng; '10' có nghĩa là chỉ trường thích ứng, không có trọng tải; '11' có nghĩa là bản chuyển thể cũng được bao gồm Miền và tải trọng.
Continity_counter 4b Bộ đếm tăng dần, từ 0-f, giá trị bắt đầu không nhất thiết phải nhận 0, nhưng nó phải liên tục
Nội dung của lớp ts được xác định bằng giá trị PID và nội dung chính bao gồm: bảng PAT, bảng PMT, luồng âm thanh và luồng video. Để phân tích cú pháp luồng ts, trước tiên bạn phải tìm bảng PAT, miễn là bạn tìm thấy PAT, bạn có thể tìm thấy PMT, sau đó bạn có thể tìm thấy các luồng âm thanh và video. Giá trị PID của bảng PAT được cố định ở 0. Bảng PAT và bảng PMT cần được chèn vào luồng ts thường xuyên, vì người dùng có thể tham gia luồng ts bất kỳ lúc nào, khoảng thời gian này tương đối nhỏ, thường là vài khung video để thêm PAT và PMT. Bảng PAT và PMT là cần thiết, và các bảng khác như SDT (bảng mô tả dịch vụ) cũng có thể được thêm vào, nhưng luồng hls có thể được phát miễn là có PAT và PMT.
Bảng PAT: Chức năng chính của nó là chỉ ra giá trị PID của bảng PMT.
Bảng PMT: Chức năng chính của nó là chỉ định giá trị PID của luồng âm thanh và video.
Luồng âm thanh / luồng video: Mang nội dung âm thanh và video.
thích nghi
Adap_field_length Độ dài trường thích ứng 1B, số byte phía sau
cờ 1B lấy 0x50 để chỉ ra PCR hoặc 0x40 để không bao gồm PCR
PCR 5B Program Clock Reference, tham chiếu đồng hồ chương trình, được sử dụng để khôi phục đồng hồ định thời hệ thống STC (Đồng hồ thời gian hệ thống) phù hợp với bộ mã hóa.
nhồi nhét byte xB nhồi byte, giá trị là 0xff
Chiều dài của vùng thích ứng phải bao gồm một byte được xác định bởi chỉ báo lỗi truyền. pcr là tham chiếu đồng hồ chương trình, pcr, dts, pts là tất cả các giá trị được lấy mẫu của cùng một đồng hồ hệ thống, pcr là gia số, vì vậy nó có thể được đặt làm giá trị dts, dữ liệu âm thanh không cần pcr. Không có ruộng thì ipad chơi được nhưng vlc thì không chơi được. Khi đóng gói luồng ts, các bảng PAT và PMT không có trường thích ứng. Nếu độ dài không đủ, chỉ cần điền vào 0xff. Cả luồng video và luồng âm thanh đều cần thêm trường thích ứng, trường này thường được thêm vào gói ts đầu tiên và gói ts cuối cùng của một khung, và gói ts ở giữa không được thêm vào.
Định dạng PAT
table_id 8b PAT bảng được cố định thành 0x00
section_syntax_indicator 1b được cố định ở 1
1 0b được cố định ở XNUMX
2b dành riêng được sửa thành 11
section_length 12b Độ dài của dữ liệu sau
Transport_stream_id 16b ID luồng truyền tải, được sửa thành 0x0001
2b dành riêng được sửa thành 11
version_number 5b Số phiên bản, cố định ở 00000, nếu PAT thay đổi, số phiên bản sẽ tăng 1
current_next_indicator 1b được cố định thành 1, cho biết rằng bảng PAT này có thể được sử dụng, nếu nó là 0, hãy đợi bảng PAT tiếp theo
section_number 8b được sửa thành 0x00
last_section_number 8b được sửa thành 0x00
Bắt đầu vòng lặp
program_number 16b Khi số chương trình là 0x0000, có nghĩa là đây là NIT, khi số chương trình là 0x0001, có nghĩa là đây là PMT
3b dành riêng được sửa thành 111
PID 13b Giá trị PID tương ứng với nội dung của số chương trình
Kết thúc vòng lặp
CRC32 32b Mã kiểm tra CRC32 của dữ liệu trước đó
Định dạng PMT
table_id 8b Bảng PMT có bất kỳ giá trị nào, 0x02
section_syntax_indicator 1b được cố định ở 1
1 0b được cố định ở XNUMX
2b dành riêng được sửa thành 11
section_length 12b Độ dài của dữ liệu sau
program_number 16b số kênh, có nghĩa là kênh được liên kết với PMT hiện tại, giá trị là 0x0001
2b dành riêng được sửa thành 11
version_number 5b Số phiên bản, cố định ở 00000, nếu PAT thay đổi, số phiên bản sẽ tăng 1
current_next_indicator 1b được cố định ở 1
section_number 8b được sửa thành 0x00
last_section_number 8b được sửa thành 0x00
3b dành riêng được sửa thành 111
PCR_PID 13b PID của gói TS nơi chứa PCR (đồng hồ tham chiếu chương trình), được chỉ định là PID video
4b dành riêng được sửa thành 1111
program_info_length 12b Thông tin mô tả chương trình, được chỉ định là 0x000 có nghĩa là không
Bắt đầu vòng lặp
stream_type 8b Loại luồng, đánh dấu là Video hoặc Âm thanh hoặc dữ liệu khác, mã hóa h.264 tương ứng với 0x1b, mã hóa aac tương ứng với 0x0f, mã hóa mp3 tương ứng với 0x03
3b dành riêng được sửa thành 111
Primary_PID 13b PID tương ứng với stream_type
4b dành riêng được sửa thành 1111
ES_info_length 12b Thông tin mô tả, được chỉ định là 0x000 có nghĩa là không
Kết thúc vòng lặp
CRC32 32b Mã kiểm tra CRC32 của dữ liệu trước đó
(2) lớp pes
Lớp pes thêm dấu thời gian và thông tin khác vào mỗi khung hình video / âm thanh. Gói pes chứa rất nhiều nội dung, và chúng tôi chỉ để lại những nội dung thường dùng nhất.
mã bắt đầu pes Mã bắt đầu 3B, cố định ở 0x000001
giá trị âm thanh 1B id luồng (0xc0-0xdf), thường là 0xc0
Giá trị video (0xe0-0xef), thường là 0xe0
độ dài gói pes 2B Độ dài của dữ liệu pes phía sau, 0 có nghĩa là độ dài không giới hạn,
Chỉ độ dài dữ liệu video mới vượt quá 0xffff
Cờ 1B thường lấy giá trị 0x80, có nghĩa là dữ liệu không được mã hóa, không có quyền ưu tiên và là dữ liệu được sao lưu
Cờ 1B giá trị 0x80 chỉ có nghĩa là pts, giá trị 0xc0 có nghĩa là pts và dts
độ dài dữ liệu pes 1B Độ dài của dữ liệu sau, giá trị là 5 hoặc 10
pts 5B giá trị 33 bit
dts 5B giá trị 33 bit
pts là dấu thời gian hiển thị và dts là dấu thời gian giải mã. Cả hai dấu thời gian đều được yêu cầu cho dữ liệu video. Pts và dts của dữ liệu âm thanh giống nhau, vì vậy chỉ cần pts. Có hai dấu thời gian, pts và dts, được tạo ra bởi khung B. Pts của khung I và P bằng dts. Nếu video không có khung B, pts sẽ luôn giống với dts. Đọc tuần tự các khung video từ tệp và trình tự của các khung được trích xuất giống như trình tự dts. Thuật toán dts tương đối đơn giản, giá trị ban đầu + gia số là đủ, tính toán pts phức tạp hơn và cần thêm phần bù vào dts.
Chỉ có pts trong pes âm thanh (giống như dts), khung I và P của video phải có cả hai dấu thời gian và khung B của video chỉ cần pts (giống như dts). Để đóng gói pts và dts, bạn cần biết loại khung video, nhưng chúng ta không thể đánh giá loại khung thông qua định dạng vùng chứa. Bạn phải phân tích cú pháp nội dung h.264 để lấy loại khung.
ví dụ:
IPBBBP
Thứ tự đọc: 1 2 3 4 5 6
thứ tự dts: 1 2 3 4 5 6
thứ tự pts: 1 5 3 2 4 6
Thuật toán dts video theo yêu cầu:
dts = giá trị ban đầu + 90000 / video_frame_rate, giá trị ban đầu có thể được chỉ định tùy ý, nhưng tốt nhất không nên lấy 0, video_frame_rate là tốc độ khung hình, chẳng hạn như 23, 30.
pts và dts dựa trên thang thời gian, thang thời gian 1s = 90000, một khung hình phải là 90000 / video_frame_rate timecale.
Chia tỷ lệ thời gian của một khung hình cho tần số lấy mẫu có thể được chuyển đổi thành thời lượng phát lại của một khung hình
Thuật toán dts âm thanh theo yêu cầu:
dts = giá trị ban đầu + (90000 * audio_samples_per_frame) / audio_sample_rate, giá trị của audio_samples_per_frame có liên quan đến codec, giá trị aac là 1024, giá trị mp3 là 1158, audio_sample_rate là tỷ lệ lấy mẫu, chẳng hạn như 24000, 41000. AAC giải mã một khung của 1024 mẫu mỗi kênh, nghĩa là thời lượng của khung hình là 1024 / sample_rate giây. Vì vậy, dấu thời gian của mỗi khung là 0, 1024 / sample_rate, ..., 1024 * n / sample_rate giây.
Các dts và pts của video trực tiếp phải sử dụng trực tiếp thời gian trong luồng dữ liệu trực tiếp và không được tính bằng công thức.
(3) lớp es
Lớp es đề cập đến dữ liệu âm thanh và video, chúng tôi chỉ giới thiệu video h.264 và âm thanh aac.
video h.264:
Để đóng gói dữ liệu h.264, chúng ta phải thêm nalu (đơn vị Lớp trừu tượng mạng) vào dữ liệu video. Nalu bao gồm tiêu đề nalu và kiểu nalu. Tiêu đề nalu được cố định thành 0x00000001 (đầu khung) hoặc 0x000001 (trong khung). Dữ liệu của h.264 bao gồm các lát và nội dung của các lát bao gồm: video, sps, pps, v.v. Kiểu nalu xác định nội dung của dữ liệu h.264 tiếp theo.
F 1b Cấm_zero_bit, h.264 quy định rằng nó phải bằng 0
NRI 2b nal_ref_idc, giá trị 0 ~ 3, cho biết tầm quan trọng của khung nalu, I, sps, pps này thường lấy 3, khung P thường lấy 2 và khung B thường lấy 0
Loại 5b tham khảo bảng bên dưới
Mô tả nal_unit_type
0 không được sử dụng
1 Hình ảnh không phải IDR, IDR đề cập đến khung chính
2 phân vùng A
Phân vùng 3 lát B
|
Nhập email để nhận bất ngờ
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Người Afrikaans
sq.fmuser.org -> Tiếng Albania
ar.fmuser.org -> tiếng Ả Rập
hy.fmuser.org -> Armenia
az.fmuser.org -> Azerbaijan
eu.fmuser.org -> Basque
be.fmuser.org -> Tiếng Belarus
bg.fmuser.org -> Tiếng Bulgaria
ca.fmuser.org -> Catalan
zh-CN.fmuser.org -> Tiếng Trung (Giản thể)
zh-TW.fmuser.org -> Trung Quốc (truyền thống)
hr.fmuser.org -> Tiếng Croatia
cs.fmuser.org -> Tiếng Séc
da.fmuser.org -> Đan Mạch
nl.fmuser.org -> Hà Lan
et.fmuser.org -> Tiếng Estonia
tl.fmuser.org -> Phi Luật Tân
fi.fmuser.org -> Phần Lan
fr.fmuser.org -> Pháp
gl.fmuser.org -> Galicia
ka.fmuser.org -> tiếng Georgia
de.fmuser.org -> Đức
el.fmuser.org -> Hy Lạp
ht.fmuser.org -> Tiếng Creole của Haiti
iw.fmuser.org -> Tiếng Do Thái
hi.fmuser.org -> Tiếng Hindi
hu.fmuser.org -> Hungary
is.fmuser.org -> tiếng Iceland
id.fmuser.org -> tiếng Indonesia
ga.fmuser.org -> Ailen
it.fmuser.org -> Ý
ja.fmuser.org -> Nhật Bản
ko.fmuser.org -> Hàn Quốc
lv.fmuser.org -> Tiếng Latvia
lt.fmuser.org -> Tiếng Litva
mk.fmuser.org -> Người Macedonian
ms.fmuser.org -> Mã Lai
mt.fmuser.org -> Maltese
no.fmuser.org -> Na Uy
fa.fmuser.org -> tiếng Ba Tư
pl.fmuser.org -> Tiếng Ba Lan
pt.fmuser.org -> tiếng Bồ Đào Nha
ro.fmuser.org -> Rumani
ru.fmuser.org -> tiếng Nga
sr.fmuser.org -> Tiếng Serbia
sk.fmuser.org -> Tiếng Slovak
sl.fmuser.org -> Tiếng Slovenia
es.fmuser.org -> tiếng Tây Ban Nha
sw.fmuser.org -> Tiếng Swahili
sv.fmuser.org -> Thụy Điển
th.fmuser.org -> Thái
tr.fmuser.org -> Thổ Nhĩ Kỳ
uk.fmuser.org -> Tiếng Ukraina
ur.fmuser.org -> Tiếng Urdu
vi.fmuser.org -> Tiếng việt
cy.fmuser.org -> tiếng Wales
yi.fmuser.org -> Yiddish
FMUSER Truyền video và âm thanh không dây dễ dàng hơn!
Liên hệ
Địa Chỉ:
Phòng số 305 Tòa nhà HuiLan Số 273 đường Huanpu Quảng Châu Trung Quốc 510620
Categories
Đăng ký bản tin