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 -> 이디시어
며칠 전 저는 HTTP 라이브 스트리밍 (HLS) 기술을 연구하고 C ++로 작성된 HLS 인코더 hlsliveencoder를 구현하는 데 시간을 보냈습니다. 그 기능은 카메라 및 마이크, 실시간 H.264 비디오 코딩 및 aac 오디오 코딩을 캡처하고 HLS 프로토콜 사양에 따라 세그먼트 화 된 표준 TS 파일 및 m3u8 인덱스 파일을 생성하는 것입니다. 제 hlsliveencoder와 타사 HTTP 서버 (예 : nginx)를 통해 HTTP의 라이브 스트리밍을 성공적으로 실현하고 iPhone에서 테스트를 통과했습니다. 나는 여기에 몇 가지 이득을 쓸 것입니다.
1. HLS 기술 분석
HTTP 라이브 스트리밍 (HLS)은 Apple Inc.에서 구현 한 HTTP 기반 스트리밍 미디어 전송 프로토콜로, 라이브 및 주문형 스트리밍 미디어를 구현할 수 있습니다. 주로 IOS 시스템에서 IOS 장치 (예 : iPhone 및 iPad)에 대한 오디오 및 비디오 라이브 및 주문형 솔루션을 제공하는 데 사용됩니다. 주문형 HLS는 기본적으로 주문형 공통 세그먼트 HTTP입니다. 차이점은 세그먼트가 매우 작다는 것입니다. 주문형 HLS를 실현하려면 미디어 파일을 분할하는 것이 중요합니다. 현재 사용할 수있는 많은 오픈 소스 도구가 있습니다. 여기서는 논의하지 않고 HLS 생방송 기술에 대해서만 이야기합니다.
RTMP 프로토콜, RTSP 프로토콜, MMS 프로토콜 등과 같은 일반적인 라이브 스트리밍 프로토콜과 비교할 때 HLS 라이브 스트리밍의 가장 큰 차이점은 라이브 클라이언트가 완전한 데이터 스트림을 얻지 못한다는 것입니다. HLS 프로토콜은 라이브 데이터 스트림을 서버 측에 연속, 단기 및 긴 미디어 파일 (mpeg-ts 형식)로 저장하는 반면, 클라이언트 측은 이러한 작은 파일을 계속 다운로드하고 재생합니다. 서버 측은 항상 새로운 작은 파일을 생성하기 때문입니다. 클라이언트 측은 라이브를 실현하기 위해 서버에서 얻은 파일 만 재생하면됩니다. HLS는 기본적으로 VOD 기술을 통해 생방송을 실현하고 있음을 알 수 있습니다. 데이터가 HTTP 프로토콜을 통해 전송되기 때문에 방화벽이나 프록시 문제를 고려할 필요가 없으며 파일 분할 시간이 매우 짧습니다. 클라이언트는 다양한 대역폭 조건에서 재생에 맞게 코드 속도를 빠르게 선택하고 전환 할 수 있습니다. 그러나 HLS의 기술적 특성으로 인해 지연은 항상 일반 라이브 스트리밍 프로토콜보다 높습니다.
위의 이해에 따르면 HTTP 라이브 스트리밍을 라이브로 구현하려면 다음과 같은 핵심 기술을 연구하고 구현해야합니다.
(1) 비디오 소스 및 오디오 소스의 데이터 수집
(2) 원본 데이터는 H264 및 AAC로 인코딩됩니다.
(3) 비디오 및 오디오 데이터는 mpeg-ts 패킷으로 패키징됩니다.
(4) HLS 분할 생성 전략 및 m3u8 인덱스 파일
2. HTTP 전송 프로토콜
그중 첫 번째와 두 번째 점은 이전 기사에서 언급했고 마지막은 기존 HTTP 서버를 사용할 수 있다는 점이므로 세 번째와 네 번째 점의 구현이 핵심입니다.
(1) 프로그램 프레임 워크 및 구현
위의 분석을 통해 HLS 라이브 인코더의 논리와 프로세스는 기본적으로 명확합니다. 각각 오디오 및 비디오 코딩 스레드를 시작하고 DirectShow (또는 기타) 기술을 통해 오디오 및 비디오 획득을 실현 한 다음 비디오 및 비디오에 대해 각각 libx264 및 libfaac을 호출합니다. 오디오 코딩. 두 개의 인코딩 스레드가 실시간으로 오디오 및 비디오 데이터를 인코딩 한 후 사용자 지정 파티션 전략에 따라 mpeg-ts 형식의 세그먼트 파일에 저장합니다. 세그먼트 파일이 저장되면 m3u8 인덱스 파일이 업데이트됩니다. 아래 그림과 같이 :
위 그림에서 hlsliveencoder는 비디오 및 오디오 데이터를 수신 한 후 먼저 현재 파티션을 종료해야하는지 여부를 결정하고 새 파티션을 생성하여 TS 파티션의 연속 생성을 계속해야합니다. 플레이어의 디코딩 실패를 방지하기 위해 새로운 조각화는 키 프레임에서 시작되어야합니다. 핵심 코드는 다음과 같습니다.
tsmuxer의 인터페이스도 비교적 간단합니다.
(2) HLS 세그먼트 생성 전략 및 m3u8
① 분할 전략
HLS의 세분화 전략은 기본적으로 10 초마다 분할하는 것이 좋습니다. 물론 분할의 실제 길이에 따라 특정 시간을 표시해야합니다.
일반적으로 캐시 및 기타 이유로 인해 최신 세 개의 조각 주소가 색인 파일에 보관되고 "슬라이딩 창"형태로 업데이트됩니다.
② m3u8 파일 소개
M3u8은 HTTP 라이브 스트리밍의 인덱스 파일입니다. M3u8은 다음과 같이 간주 될 수 있습니다. M3U 형식 파일은 기본적으로 m3u8 파일이 UTF-8 문자 인코딩을 사용한다는 점입니다.
코드 복사
# Extm3u M3U 파일 헤더, 첫 번째 줄에 배치해야 함
# ext-x-media-sequence의 첫 번째 TS 세그먼트의 일련 번호
# Ext-x-targetduration 각 TS 세그먼트의 최대 기간
# ext-x-allow-cache가 캐시를 허용합니까?
# ext-x-endlist m3u8 파일의 끝
#Extinf 추가 정보, 기간, 대역폭 등과 같은 분할 t의 정보
|
놀라움을 얻으려면 이메일을 입력하십시오.
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 뉴스레터