FMUSER Wirless ส่งวิดีโอและเสียงได้ง่ายขึ้น!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> แอฟริคานส์
sq.fmuser.org -> แอลเบเนีย
ar.fmuser.org -> ภาษาอาหรับ
hy.fmuser.org -> อาร์เมเนีย
az.fmuser.org -> อาเซอร์ไบจัน
eu.fmuser.org -> บาสก์
be.fmuser.org -> เบลารุส
bg.fmuser.org -> บัลแกเรีย
ca.fmuser.org -> คาตาลัน
zh-CN.fmuser.org -> ภาษาจีน (ประยุกต์)
zh-TW.fmuser.org -> ภาษาจีน (ดั้งเดิม)
hr.fmuser.org -> โครเอเชีย
cs.fmuser.org -> เช็ก
da.fmuser.org -> เดนมาร์ก
nl.fmuser.org -> ดัตช์
et.fmuser.org -> เอสโตเนีย
tl.fmuser.org -> ฟิลิปปินส์
fi.fmuser.org -> ฟินแลนด์
fr.fmuser.org -> ฝรั่งเศส
gl.fmuser.org -> กาลิเซีย
ka.fmuser.org -> จอร์เจีย
de.fmuser.org -> เยอรมัน
el.fmuser.org -> กรีก
ht.fmuser.org -> ชาวเฮติครีโอล
iw.fmuser.org -> ภาษาฮิบรู
hi.fmuser.org -> ภาษาฮินดี
hu.fmuser.org -> ฮังการี
is.fmuser.org -> ไอซ์แลนด์
id.fmuser.org -> ชาวอินโดนีเซีย
ga.fmuser.org -> ไอริช
it.fmuser.org -> อิตาเลี่ยน
ja.fmuser.org -> ภาษาญี่ปุ่น
ko.fmuser.org -> ภาษาเกาหลี
lv.fmuser.org -> ลัตเวีย
lt.fmuser.org -> ลิทัวเนีย
mk.fmuser.org -> มาซิโดเนีย
ms.fmuser.org -> มาเลย์
mt.fmuser.org -> มอลตา
no.fmuser.org -> นอร์เวย์
fa.fmuser.org -> เปอร์เซีย
pl.fmuser.org -> โปแลนด์
pt.fmuser.org -> โปรตุเกส
ro.fmuser.org -> โรมาเนีย
ru.fmuser.org -> รัสเซีย
sr.fmuser.org -> เซอร์เบีย
sk.fmuser.org -> สโลวัก
sl.fmuser.org -> สโลวีเนีย
es.fmuser.org -> สเปน
sw.fmuser.org -> ภาษาสวาฮิลี
sv.fmuser.org -> สวีเดน
th.fmuser.org -> ไทย
tr.fmuser.org -> ตุรกี
uk.fmuser.org -> ยูเครน
ur.fmuser.org -> ภาษาอูรดู
vi.fmuser.org -> เวียดนาม
cy.fmuser.org -> เวลส์
yi.fmuser.org -> ยิดดิช
HLS และ Http Live Streaming เป็นโปรโตคอลสำหรับการสตรีมแบบเรียลไทม์ที่กำหนดโดย Apple HLS ถูกนำไปใช้ตามโปรโตคอล HTTP เนื้อหาการส่งประกอบด้วยสองส่วนส่วนหนึ่งคือไฟล์คำอธิบาย M3U8 และอีกส่วนคือไฟล์สื่อ TS
1. ไฟล์ M3U8
ไฟล์สื่ออธิบายเป็นข้อความซึ่งประกอบด้วยชุดของแท็ก
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: บรรทัดแรกของไฟล์ M3U8 แต่ละไฟล์ต้องเป็นแท็กนี้
# EXT-X-TARGETDURATION: ระบุระยะเวลาสูงสุดของส่วนสื่อ (วินาที) ระยะเวลาที่ระบุใน #EXTINF ต้องน้อยกว่าหรือเท่ากับค่าสูงสุดนี้ ค่านี้สามารถปรากฏได้เพียงครั้งเดียว
#EXTINF: อธิบายความยาวของไฟล์สื่อเดียว ไฟล์มีเดียตามมาเช่น ./0.ts
2. ไฟล์ ts
ไฟล์ ts เป็นไฟล์สตรีมการขนส่งรูปแบบการเข้ารหัสวิดีโอหลักคือ h264 / mpeg4 และเสียงคือ acc / MP3
ไฟล์ ts แบ่งออกเป็นสามชั้น: สตรีมการขนส่งชั้น ts, ชั้น pes Packet Elemental Stream, es ชั้น Elementary Stream เลเยอร์ es คือข้อมูลเสียงและวิดีโอและเลเยอร์ pes คือข้อมูลคำอธิบายเฟรมข้อมูลเช่นการประทับเวลาที่เพิ่มลงในข้อมูลเสียงและวิดีโอ ชั้น ts คือการเพิ่มข้อมูลที่จำเป็นสำหรับการระบุและการส่งกระแสข้อมูลในชั้น pes
หมายเหตุ: รายละเอียดมีดังนี้
(1) ชั้น ts ขนาดแพ็คเก็ต ts ถูกกำหนดไว้ที่ 188 ไบต์และเลเยอร์ ts แบ่งออกเป็นสามส่วน: ส่วนหัว ts, ฟิลด์การปรับตัวและน้ำหนักบรรทุก ส่วนหัว ts ได้รับการแก้ไขที่ 4 ไบต์ ฟิลด์การปรับเปลี่ยนอาจมีหรือไม่มีอยู่และหน้าที่หลักคือการกรอกข้อมูลที่น้อยกว่า 188 ไบต์ payload เป็นข้อมูล pes
ts ส่วนหัว
sync_byte ไบต์การซิงโครไนซ์ 8b แก้ไขที่ 0x47
transport_error_indicator 1b ตัวบ่งชี้ข้อผิดพลาดการขนส่งซึ่งระบุว่ามีไบต์ที่ไร้ประโยชน์หลังจากฟิลด์ปรับของส่วนหัว ts โดยปกติจะเป็น 0 ไบต์นี้จะถูกนับตามความยาวของฟิลด์ดัดแปลง
payload_unit_start_indicator 1b Load unit start indicator ซึ่งทำเครื่องหมายเป็น 1 ที่จุดเริ่มต้นของแพ็กเก็ตข้อมูลที่สมบูรณ์
transport_priority 1b ลำดับความสำคัญการขนส่ง 0 คือลำดับความสำคัญต่ำ 1 คือลำดับความสำคัญสูงโดยปกติจะเป็น 0
ค่า pid 13b pid
transport_scrambling_control 2b Transport scrambling control, 00 หมายถึงไม่ได้เข้ารหัส
adaptation_field_control 2b ไม่ว่าจะรวมฟิลด์การปรับตัว '00' ถูกสงวนไว้ '01' หมายถึงไม่มีฟิลด์การปรับตัวมีเพียงน้ำหนักบรรทุก '10' หมายถึงเฉพาะฟิลด์การปรับตัวเท่านั้นไม่มีน้ำหนักบรรทุก '11' หมายถึงการดัดแปลงนั้นรวมถึงโดเมนและเพย์โหลดด้วย
Continity_counter 4b ตัวนับที่เพิ่มขึ้นจาก 0-f ค่าเริ่มต้นไม่จำเป็นต้องใช้ 0 แต่ต้องเป็นแบบต่อเนื่อง
เนื้อหาของเลเยอร์ ts ถูกระบุโดยค่า PID และเนื้อหาหลักประกอบด้วย: ตาราง PAT, ตาราง PMT, สตรีมเสียงและสตรีมวิดีโอ ในการแยกวิเคราะห์สตรีม ts อันดับแรกคุณต้องหาตาราง PAT ตราบใดที่คุณพบ PAT คุณจะพบ PMT จากนั้นคุณจะพบสตรีมเสียงและวิดีโอ ค่า PID ของตาราง PAT ได้รับการแก้ไขที่ 0 ตาราง PAT และตาราง PMT จำเป็นต้องถูกแทรกลงในสตรีม ts เป็นประจำเนื่องจากผู้ใช้สามารถเข้าร่วมสตรีม ts ได้ตลอดเวลาช่วงเวลานี้ค่อนข้างน้อย เฟรมวิดีโอเพื่อเพิ่ม PAT และ PMT ตาราง PAT และ PMT เป็นสิ่งที่จำเป็นและสามารถเพิ่มตารางอื่น ๆ เช่น SDT (ตารางคำอธิบายบริการ) ได้ แต่สตรีม hls สามารถเล่นได้ตราบเท่าที่มี PAT และ PMT
ตาราง PAT: หน้าที่หลักคือการระบุค่า PID ของตาราง PMT
ตาราง PMT: หน้าที่หลักคือการระบุค่า PID ของสตรีมเสียงและวิดีโอ
สตรีมเสียง / สตรีมวิดีโอ: มีเนื้อหาที่เป็นเสียงและวิดีโอ
การปรับตัว
adaptation_field_length 1B ความยาวฟิลด์การปรับตัวจำนวนไบต์ที่อยู่เบื้องหลัง
แฟล็ก 1B ใช้เวลา 0x50 เพื่อระบุ PCR หรือ 0x40 เพื่อไม่รวม PCR
PCR 5B Program Clock Reference การอ้างอิงนาฬิกาโปรแกรมใช้เพื่อกู้คืนนาฬิกาจับเวลาระบบ STC (System Time Clock) ที่สอดคล้องกับตัวเข้ารหัส
stuffing_bytes xB บรรจุไบต์ค่าคือ 0xff
ความยาวของพื้นที่การปรับจะรวมถึงหนึ่งไบต์ที่ระบุโดยตัวบ่งชี้ข้อผิดพลาดในการส่ง pcr คือการอ้างอิงนาฬิกาของโปรแกรม pcr, dts, pts เป็นค่าตัวอย่างทั้งหมดของนาฬิการะบบเดียวกัน pcr เป็นค่าที่เพิ่มขึ้นดังนั้นจึงสามารถตั้งค่าเป็นค่า dts ได้ข้อมูลเสียงไม่จำเป็นต้องใช้ pcr ถ้าไม่มีสนาม ipad เล่นได้ แต่ vlc เล่นไม่ได้ เมื่อบรรจุสตรีม ts ตาราง PAT และ PMT จะไม่มีฟิลด์การปรับเปลี่ยน หากความยาวไม่เพียงพอให้กรอก 0xff ทั้งสตรีมวิดีโอและสตรีมเสียงจำเป็นต้องเพิ่มฟิลด์การปรับแต่งซึ่งโดยปกติจะเพิ่มลงในแพ็กเก็ต ts แรกและแพ็กเก็ต ts สุดท้ายของเฟรมและจะไม่เพิ่มแพ็กเก็ต ts ตรงกลาง
รูปแบบ PAT
table_id 8b ตาราง PAT ถูกกำหนดเป็น 0x00
section_syntax_indicator 1b ได้รับการแก้ไขที่ 1
ศูนย์ 1b ได้รับการแก้ไขที่ 0
2b ที่สงวนไว้ได้รับการแก้ไขเป็น 11
section_length 12b ความยาวของข้อมูลต่อไปนี้
transport_stream_id 16b ID สตรีมการขนส่งแก้ไขเป็น 0x0001
2b ที่สงวนไว้ได้รับการแก้ไขเป็น 11
version_number 5b หมายเลขเวอร์ชันแก้ไขที่ 00000 หาก PAT เปลี่ยนแปลงหมายเลขเวอร์ชันจะเพิ่มขึ้น 1
current_next_indicator 1b ถูกกำหนดเป็น 1 แสดงว่าสามารถใช้ตาราง PAT นี้ได้หากเป็น 0 ให้รอตาราง PAT ถัดไป
section_number 8b ถูกกำหนดเป็น 0x00
last_section_number 8b ถูกกำหนดเป็น 0x00
เริ่มลูป
program_number 16b เมื่อหมายเลขโปรแกรมคือ 0x0000 หมายความว่านี่คือ NIT เมื่อหมายเลขโปรแกรมคือ 0x0001 หมายความว่านี่คือ PMT
3b ที่สงวนไว้ได้รับการแก้ไขเป็น 111
ค่า PID 13b PID ที่สอดคล้องกับเนื้อหาของหมายเลขโปรแกรม
สิ้นสุดลูป
รหัสตรวจสอบ CRC32 32b CRC32 ของข้อมูลก่อนหน้านี้
รูปแบบ PMT
table_id 8b ตาราง PMT มีค่าใด ๆ 0x02
section_syntax_indicator 1b ได้รับการแก้ไขที่ 1
ศูนย์ 1b ได้รับการแก้ไขที่ 0
2b ที่สงวนไว้ได้รับการแก้ไขเป็น 11
section_length 12b ความยาวของข้อมูลต่อไปนี้
program_number หมายเลขช่อง 16b ซึ่งหมายถึงช่องที่เกี่ยวข้องกับ PMT ปัจจุบันค่าคือ 0x0001
2b ที่สงวนไว้ได้รับการแก้ไขเป็น 11
version_number 5b หมายเลขเวอร์ชันแก้ไขที่ 00000 หาก PAT เปลี่ยนแปลงหมายเลขเวอร์ชันจะเพิ่มขึ้น 1
current_next_indicator 1b ได้รับการแก้ไขที่ 1
section_number 8b ถูกกำหนดเป็น 0x00
last_section_number 8b ถูกกำหนดเป็น 0x00
3b ที่สงวนไว้ได้รับการแก้ไขเป็น 111
PCR_PID 13b PID ของแพ็กเก็ต TS ที่ PCR (นาฬิกาอ้างอิงโปรแกรม) ตั้งอยู่ซึ่งกำหนดให้เป็นวิดีโอ PID
4b ที่สงวนไว้ได้รับการแก้ไขเป็น 1111
program_info_length 12b ข้อมูลคำอธิบายโปรแกรมกำหนดให้เป็น 0x000 หมายถึงไม่ใช่
เริ่มลูป
stream_type 8b ประเภทสตรีมเครื่องหมายคือวิดีโอหรือเสียงหรือข้อมูลอื่นการเข้ารหัส h.264 สอดคล้องกับ 0x1b การเข้ารหัส aac สอดคล้องกับ 0x0f การเข้ารหัส mp3 สอดคล้องกับ 0x03
3b ที่สงวนไว้ได้รับการแก้ไขเป็น 111
primary_PID 13b PID ที่สอดคล้องกับ stream_type
4b ที่สงวนไว้ได้รับการแก้ไขเป็น 1111
ES_info_length 12b ข้อมูลคำอธิบายที่กำหนดให้เป็น 0x000 หมายถึงไม่ใช่
สิ้นสุดลูป
รหัสตรวจสอบ CRC32 32b CRC32 ของข้อมูลก่อนหน้านี้
(2) ชั้น pes
เลเยอร์ pes จะเพิ่มการประทับเวลาและข้อมูลอื่น ๆ ให้กับเฟรมวิดีโอ / เสียงแต่ละเฟรม แพคเกจ pes มีเนื้อหาจำนวนมากและเราจะปล่อยเฉพาะสิ่งที่ใช้บ่อยที่สุดเท่านั้น
รหัสเริ่มต้น pes รหัสเริ่มต้น 3B แก้ไขที่ 0x000001
สตรีม id 1B ค่าเสียง (0xc0-0xdf) โดยปกติคือ 0xc0
ค่าวิดีโอ (0xe0-0xef) โดยปกติคือ 0xe0
pes packet length 2B ความยาวของข้อมูล pes หลัง 0 หมายถึงความยาวไม่ จำกัด
เฉพาะความยาวข้อมูลวิดีโอเท่านั้นที่จะเกิน 0xffff
แฟล็ก 1B มักใช้ค่า 0x80 ซึ่งหมายความว่าข้อมูลไม่ได้เข้ารหัสไม่มีลำดับความสำคัญและได้รับการสำรองข้อมูล
ค่าสถานะ 1B 0x80 หมายถึงเฉพาะ pts ค่า 0xc0 หมายถึง pts และ dts
pes data length 1B ความยาวของข้อมูลต่อไปนี้ค่าคือ 5 หรือ 10
ค่า pts 5B 33 บิต
dts 5B 33 บิตมูลค่า
pts คือการประทับเวลาที่แสดงและ dts คือการประทับเวลาการถอดรหัส ต้องมีการประทับเวลาทั้งสองรายการสำหรับข้อมูลวิดีโอ pts และ dts ของข้อมูลเสียงเหมือนกันดังนั้นจึงต้องใช้เฉพาะ pts เท่านั้น การประทับเวลามี XNUMX จุดคือจุดและจุดซึ่งเกิดจากเฟรม B pts ของเฟรม I และ P เท่ากับ dts หากวิดีโอไม่มีเฟรม B จุดจะเหมือนกับ dts เสมอ อ่านเฟรมวิดีโอตามลำดับจากไฟล์และลำดับของเฟรมที่แยกออกมาจะเหมือนกับลำดับ dts อัลกอริทึม dts นั้นค่อนข้างง่ายค่าเริ่มต้น + การเพิ่มก็เพียงพอแล้วการคำนวณ pts มีความซับซ้อนมากขึ้นและจำเป็นต้องเพิ่มออฟเซ็ตให้กับ dts
มีเพียง pts ใน pes เสียง (เช่นเดียวกับ dts) เฟรม I และ P ของวิดีโอต้องมีทั้งการประทับเวลาและเฟรมวิดีโอ B ต้องการเฉพาะ pts (เช่นเดียวกับ dts) ในการแพ็ค pts และ dts คุณจำเป็นต้องทราบประเภทของเฟรมวิดีโอ แต่เราไม่สามารถตัดสินประเภทเฟรมผ่านรูปแบบคอนเทนเนอร์ได้ คุณต้องแยกวิเคราะห์เนื้อหา h.264 เพื่อรับประเภทเฟรม
ตัวอย่างเช่น:
IPBBBP
ลำดับการอ่าน: 1 2 3 4 5 6
คำสั่ง dts: 1 2 3 4 5 6
คำสั่ง pts: 1 5 3 2 4 6
อัลกอริทึม dts วิดีโอตามต้องการ:
dts = ค่าเริ่มต้น + 90000 / video_frame_rate ค่าเริ่มต้นสามารถระบุได้ตามอำเภอใจ แต่ไม่ควรใช้ 0 เพราะ video_frame_rate คืออัตราเฟรมเช่น 23, 30
pts และ dts จะขึ้นอยู่กับ timescale, 1s = 90000 time scale, one frame ควรเป็น 90000 / video_frame_rate timescale
การแบ่งช่วงเวลาของหนึ่งเฟรมด้วยความถี่ในการสุ่มตัวอย่างสามารถแปลงเป็นระยะเวลาการเล่นของหนึ่งเฟรมได้
อัลกอริทึม dts เสียงตามความต้องการ:
dts = ค่าเริ่มต้น + (90000 * audio_samples_per_frame) / audio_sample_rate ค่าของ audio_samples_per_frame เกี่ยวข้องกับตัวแปลงสัญญาณค่า aac คือ 1024 ค่า mp3 คือ 1158 audio_sample_rate คืออัตราการสุ่มตัวอย่างเช่น 24000, 41000 AAC จะถอดรหัสเฟรมของ 1024 ตัวอย่างต่อช่องซึ่งหมายความว่าระยะเวลาของเฟรมคือ 1024 / sample_rate วินาที ดังนั้นการประทับเวลาของแต่ละเฟรมคือ 0, 1024 / sample_rate, ... , 1024 * n / sample_rate วินาที
dts และ pts ของวิดีโอสดควรใช้เวลาในสตรีมข้อมูลสดโดยตรงและไม่ควรคำนวณด้วยสูตร
(3) ชั้น es
ชั้น es หมายถึงข้อมูลเสียงและวิดีโอเราแนะนำเฉพาะวิดีโอ h.264 และเสียง aac เท่านั้น
วิดีโอ h.264:
ในการบรรจุข้อมูล h.264 เราต้องเพิ่ม nalu (Network Abstraction Layer unit) ให้กับข้อมูลวิดีโอ nalu ประกอบด้วยส่วนหัวของ nalu และประเภท nalu ส่วนหัวของ nalu ถูกกำหนดไว้ที่ 0x00000001 (จุดเริ่มต้นของเฟรม) หรือ 0x000001 (ในเฟรม) ข้อมูลของ h.264 ประกอบด้วยชิ้นส่วนและเนื้อหาของชิ้นส่วน ได้แก่ วิดีโอ, sps, pps ฯลฯ ประเภท nalu จะกำหนดเนื้อหาของข้อมูล h.264 ที่ตามมา
F 1bidden_zero_bit, h.264 กำหนดว่าต้องเป็น 0
NRI 2b nal_ref_idc ค่า 0 ~ 3 แสดงถึงความสำคัญของ nalu, I frame, sps, pps นี้มักจะใช้เวลา 3 เฟรม P มักจะใช้เวลา 2 และเฟรม B มักจะใช้เวลา 0
ประเภท 5b อ้างอิงจากตารางด้านล่าง
nal_unit_type คำอธิบาย
0 ไม่ได้ใช้
1 ภาพที่ไม่ใช่ IDR, IDR หมายถึงคีย์เฟรม
2 ชิ้นพาร์ติชัน
พาร์ติชั่น 3 ชิ้น B
|
ป้อนอีเมลเพื่อรับเซอร์ไพรส์
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> แอฟริคานส์
sq.fmuser.org -> แอลเบเนีย
ar.fmuser.org -> ภาษาอาหรับ
hy.fmuser.org -> อาร์เมเนีย
az.fmuser.org -> อาเซอร์ไบจัน
eu.fmuser.org -> บาสก์
be.fmuser.org -> เบลารุส
bg.fmuser.org -> บัลแกเรีย
ca.fmuser.org -> คาตาลัน
zh-CN.fmuser.org -> ภาษาจีน (ประยุกต์)
zh-TW.fmuser.org -> ภาษาจีน (ดั้งเดิม)
hr.fmuser.org -> โครเอเชีย
cs.fmuser.org -> เช็ก
da.fmuser.org -> เดนมาร์ก
nl.fmuser.org -> ดัตช์
et.fmuser.org -> เอสโตเนีย
tl.fmuser.org -> ฟิลิปปินส์
fi.fmuser.org -> ฟินแลนด์
fr.fmuser.org -> ฝรั่งเศส
gl.fmuser.org -> กาลิเซีย
ka.fmuser.org -> จอร์เจีย
de.fmuser.org -> เยอรมัน
el.fmuser.org -> กรีก
ht.fmuser.org -> ชาวเฮติครีโอล
iw.fmuser.org -> ภาษาฮิบรู
hi.fmuser.org -> ภาษาฮินดี
hu.fmuser.org -> ฮังการี
is.fmuser.org -> ไอซ์แลนด์
id.fmuser.org -> ชาวอินโดนีเซีย
ga.fmuser.org -> ไอริช
it.fmuser.org -> อิตาเลี่ยน
ja.fmuser.org -> ภาษาญี่ปุ่น
ko.fmuser.org -> ภาษาเกาหลี
lv.fmuser.org -> ลัตเวีย
lt.fmuser.org -> ลิทัวเนีย
mk.fmuser.org -> มาซิโดเนีย
ms.fmuser.org -> มาเลย์
mt.fmuser.org -> มอลตา
no.fmuser.org -> นอร์เวย์
fa.fmuser.org -> เปอร์เซีย
pl.fmuser.org -> โปแลนด์
pt.fmuser.org -> โปรตุเกส
ro.fmuser.org -> โรมาเนีย
ru.fmuser.org -> รัสเซีย
sr.fmuser.org -> เซอร์เบีย
sk.fmuser.org -> สโลวัก
sl.fmuser.org -> สโลวีเนีย
es.fmuser.org -> สเปน
sw.fmuser.org -> ภาษาสวาฮิลี
sv.fmuser.org -> สวีเดน
th.fmuser.org -> ไทย
tr.fmuser.org -> ตุรกี
uk.fmuser.org -> ยูเครน
ur.fmuser.org -> ภาษาอูรดู
vi.fmuser.org -> เวียดนาม
cy.fmuser.org -> เวลส์
yi.fmuser.org -> ยิดดิช
FMUSER Wirless ส่งวิดีโอและเสียงได้ง่ายขึ้น!
ติดต่อ
ที่ตั้ง:
เลขที่ 305 อาคาร HuiLan เลขที่ 273 Huanpu Road Guangzhou China 510620
หมวดหมู่
จดหมายข่าว