FMUSER 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!
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 layer Transport Stream, pes layer Packet Elemental Stream, es layer Elementary Stream의 세 계층으로 나뉩니다. es 레이어는 오디오 및 비디오 데이터이고 pes 레이어는 오디오 및 비디오 데이터에 추가 된 타임 스탬프와 같은 데이터 프레임 설명 정보입니다. ts 계층은 pes 계층에서 데이터 스트림의 식별 및 전송에 필요한 정보를 추가하는 것입니다.
참고 : 세부 사항은 다음과 같습니다.
(1) ts 계층 ts 패킷 크기는 188 바이트로 고정되어 있으며 ts 계층은 ts 헤더, 적응 필드, 페이로드의 세 부분으로 나뉩니다. ts 헤더는 4 바이트로 고정됩니다. 적응 필드는 존재하거나 존재하지 않을 수 있으며, 주요 기능은 188 바이트 미만의 데이터를 채우는 것입니다. 페이로드는 pes 데이터입니다.
ts 헤더
sync_byte 8b 동기화 바이트, 0x47로 고정
transport_error_indicator 1b ts 헤더의 적응 필드 뒤에 쓸모없는 바이트가 있음을 나타내는 전송 오류 표시기 (보통 0),이 바이트는 적응 필드의 길이에 포함됩니다.
payload_unit_start_indicator 1b 전체 데이터 패킷의 시작 부분에 1로 표시된로드 단위 시작 표시기
transport_priority 1b 전송 우선 순위, 0은 낮은 우선 순위, 1은 높은 우선 순위, 일반적으로 0
pid 13b pid 값
transport_scrambling_control 2b 전송 스크램블링 제어, 00은 암호화되지 않음을 의미합니다.
adaptation_field_control 2b 적응 필드 포함 여부, '00'은 예약되어 있습니다. '01'은 적응 필드가없고 페이로드 만 의미합니다. '10'은 적응 필드 만 의미하며 페이로드는 없습니다. '11'은 적응이 도메인 및 페이로드도 포함됨을 의미합니다.
continuity_counter 4b 0-f에서 카운터 증가, 시작 값은 반드시 0을 취할 필요는 없지만 연속적이어야합니다.
ts 계층의 내용은 PID 값으로 식별되며 주요 내용에는 PAT 테이블, PMT 테이블, 오디오 스트림 및 비디오 스트림이 포함됩니다. ts 스트림을 구문 분석하려면 먼저 PAT 테이블을 찾아야합니다. PAT를 찾고 PMT를 찾은 다음 오디오 및 비디오 스트림을 찾을 수 있습니다. PAT 테이블의 PID 값은 0으로 고정되어 있습니다. PAT 테이블과 PMT 테이블은 ts 스트림에 정기적으로 삽입해야합니다. 사용자가 언제든지 ts 스트림에 참여할 수 있기 때문에이 간격은 비교적 짧습니다. PAT 및 PMT를 추가하는 비디오 프레임. PAT 및 PMT 테이블이 필요하며 SDT (서비스 설명 테이블)와 같은 다른 테이블도 추가 할 수 있지만 PAT 및 PMT가있는 한 hls 스트림을 재생할 수 있습니다.
PAT 테이블 : 주요 기능은 PMT 테이블의 PID 값을 표시하는 것입니다.
PMT 테이블 : 주요 기능은 오디오 및 비디오 스트림의 PID 값을 지정하는 것입니다.
오디오 스트림 / 비디오 스트림 : 오디오 및 비디오 콘텐츠를 전달합니다.
적응
adaptation_field_length 1B 적응 필드 길이, 뒤의 바이트 수
플래그 1B는 PCR을 나타내려면 0x50을, PCR을 포함하지 않으려면 0x40을 사용합니다.
인코더와 일치하는 시스템 타이밍 클록 STC (System Time Clock)를 복구하는 데 사용되는 PCR 5B Program Clock Reference, 프로그램 클록 레퍼런스.
stuffing_bytes xB stuffing bytes, 값은 0xff입니다.
적응 영역의 길이는 전송 오류 표시기로 식별되는 0 바이트를 포함해야합니다. pcr은 프로그램 클럭 참조이고, pcr, dts, pts는 모두 동일한 시스템 클럭의 샘플링 된 값이고, pcr는 증분이므로 dts 값으로 설정할 수 있으며 오디오 데이터에는 pcr이 필요하지 않습니다. 필드가 없으면 ipad는 재생할 수 있지만 vlc는 재생할 수 없습니다. ts 스트림을 패킹 할 때 PAT 및 PMT 테이블에는 적응 필드가 없습니다. 길이가 충분하지 않으면 XNUMXxff를 입력하십시오. 비디오 스트림과 오디오 스트림은 모두 일반적으로 프레임의 첫 번째 ts 패킷과 마지막 ts 패킷에 추가되는 적응 필드를 추가해야하며 중간 ts 패킷은 추가되지 않습니다.
PAT 형식
table_id 8b PAT 테이블은 0x00으로 고정됩니다.
section_syntax_indicator 1b는 1로 고정됩니다.
1 0b는 XNUMX으로 고정됩니다.
예약 된 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로 고정됩니다.
1 0b는 XNUMX으로 고정됩니다.
예약 된 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 PCR (프로그램 참조 클럭)이 위치한 TS 패킷의 PID, 비디오 PID로 지정
예약 된 4b는 1111로 고정됩니다.
program_info_length 12b 0x000으로 지정된 프로그램 설명 정보는 아니오를 의미합니다.
루프 시작
stream_type 8b 스트림 유형, mark는 비디오 또는 오디오 또는 기타 데이터, h.264 인코딩은 0x1b에 해당, aac 인코딩은 0x0f에 해당, mp3 인코딩은 0x03에 해당
예약 된 3b는 111로 고정됩니다.
elementary_PID 13b stream_type에 해당하는 PID
예약 된 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 패킷 길이 2B 뒤에있는 pes 데이터의 길이, 0은 무제한 길이를 의미합니다.
비디오 데이터 길이 만 0xffff를 초과합니다.
플래그 1B는 일반적으로 데이터가 암호화되지 않고 우선 순위가 없으며 데이터가 백업됨을 의미하는 0x80 값을 사용합니다.
플래그 1B 값 0x80은 pts 만 의미하고 0xc0 값은 pts 및 dts를 의미합니다.
pes 데이터 길이 1B 다음 데이터의 길이, 값은 5 또는 10입니다.
pts 5B 33 비트 값
dts 5B 33 비트 값
pts는 디스플레이 타임 스탬프이고 dts는 디코딩 타임 스탬프입니다. 비디오 데이터에는 두 타임 스탬프가 모두 필요합니다. 오디오 데이터의 pts와 dts는 동일하므로 pts 만 필요합니다. B 프레임으로 인해 발생하는 두 개의 타임 스탬프, pts 및 dts가 있습니다. I 및 P 프레임의 pt는 dts와 같습니다. 비디오에 B 프레임이없는 경우 pt는 항상 dts와 동일합니다. 파일에서 비디오 프레임을 순차적으로 읽으면 추출 된 프레임의 시퀀스는 dts 시퀀스와 동일합니다. dts 알고리즘은 비교적 간단하고 초기 값 + 증분이면 충분하며 pts 계산이 더 복잡하며 오프셋을 dts에 추가해야합니다.
오디오 pes에는 pt (dts와 동일) 만 있고, 비디오의 I 및 P 프레임에는 타임 스탬프가 모두 있어야하며, 비디오 B 프레임에는 pt (dts와 동일) 만 필요합니다. pts 및 dts를 압축하려면 비디오 프레임 유형을 알아야하지만 컨테이너 형식을 통해 프레임 유형을 판단 할 수는 없습니다. 프레임 유형을 가져 오려면 h.264 콘텐츠를 구문 분석해야합니다.
예를 들면 다음과 같습니다
IPBBBP
읽기 순서 : 1 2 3 4
dts 주문 : 1 2 3 4
pts 주문 : 1 5 3 2 4 6
주문형 비디오 dts 알고리즘 :
dts = 초기 값 + 90000 / video_frame_rate, 초기 값은 임의로 지정할 수 있지만 0을 사용하지 않는 것이 가장 좋습니다. video_frame_rate는 23, 30과 같은 프레임 속도입니다.
pts 및 dts는 시간 척도, 1s = 90000 시간 척도, 한 프레임은 90000 / video_frame_rate 시간 척도를 기반으로합니다.
한 프레임의 타임 스케일을 샘플링 주파수로 나누면 한 프레임의 재생 시간으로 변환 할 수 있습니다.
주문형 오디오 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 및 pt는 라이브 데이터 스트림의 시간을 직접 사용해야하며 공식으로 계산해서는 안됩니다.
(3) es 층
es 레이어는 오디오 및 비디오 데이터를 나타내며 h.264 비디오 및 aac 오디오 만 소개합니다.
h.264 비디오 :
h.264 데이터를 압축하려면 비디오 데이터에 nalu (네트워크 추상화 계층 단위)를 추가해야합니다. nalu에는 nalu 헤더와 nalu 유형이 포함됩니다. nalu 헤더는 0x00000001 (프레임 시작) 또는 0x000001 (프레임 내)로 고정됩니다. h.264의 데이터는 슬라이스로 구성되며 슬라이스의 내용에는 video, sps, pps 등이 포함됩니다. nalu 유형은 후속 h.264 데이터의 내용을 결정합니다.
F 1b forbidden_zero_bit, h.264는 0이어야한다고 규정합니다.
NRI 2b nal_ref_idc, 값 0 ~ 3,이 nalu의 중요성을 나타냅니다. I 프레임, sps, pps는 일반적으로 3, P 프레임은 일반적으로 2, B 프레임은 일반적으로 0을 사용합니다.
유형 5b는 아래 표를 참조하십시오
nal_unit_type 설명
0 사용하지 않음
1 비 IDR 이미지, IDR은 키 프레임을 나타냅니다.
2 슬라이스 파티션 A
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 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!
Contact
주소:
No.305 Room HuiLan Building No.273 Huanpu Road 광저우 중국 510620
카테고리
MMCC 뉴스레터