HLS 스트리밍 전송 생성 및 녹화(파이썬 및 ffmpeg)

9985 단어 파이썬HLSffmpeg
곧 5G 통신이 도래해 라이브 전송을 활용한 안건이 늘어날 것으로 보입니다. 이번에는 파이썬과 ffmpeg를 사용하여 HLS 생성 및 녹화를 소개합니다.

HLS 정보



개요
  • HLS는 HTTP Live Streaming의 약자입니다. 애플이 개발하고 있습니다. 브라우저는 Mac의 Safari와 Windows의 Edge를 지원합니다.

  • 특징
  • 파일이어야 합니다. 기본적으로는 MP4 파일을 5초마다 분할했을 뿐입니다. 그래서 Http 서버에 넣는 것만으로 사용할 수 있습니다 (5 초는 변경 가능)
  • 적응 비트 레이트. 환경에 따라 고화질과 저화질이 자동으로 전환됩니다. 자동적인 것이 포인트.

  • 파일
  • 일련의 ts 파일과 재생할 m3u8 파일이 있습니다. 무료 소프트웨어 VLC 등에서는 m3u8 파일을 그대로 재생할 수 있습니다.



  • 동영상
    HLS


    input.mp4

    playlist.m3u8001.ts002.ts003.ts004.ts005.ts


    HLS 만들기



    비디오 MP4 파일에서 HLS를 만듭니다. input.mp4 파일과 hls 폴더를 준비하고 다음 main.py를 실행하십시오.
  • Mac의 경우 brew install ffmpeg로 ffmpeg를 설치하십시오.
  • Windows의 경우 ffmpeg.exe를 구하고 다음 ffmepg를 ffmepg.exe로 다시 작성하면 OK입니다.

  • main.py
    # -*- coding: utf-8 -*-
    import sys, os
    import subprocess
    import codecs
    
    def create_hls():
        # 高画質m3u8の作成 (input.mp4 -> hls/h.m3u8)
        c = 'ffmpeg'
        c += ' -i input.mp4'
        c += ' -codec copy -vbsf h264_mp4toannexb -map 0'
        c += ' -f segment -segment_format mpegts -segment_time 5'
        c += ' -segment_list hls/h.m3u8'
        c += ' hls/h_%5d.ts'
        code = subprocess.call(c.split())
        print('process=' + str(code))
    
        # 低画質mp4の作成 (input.mp4 -> input_low.mp4)
        c = 'ffmpeg'
        c += ' -i input.mp4'
        c += ' -f mp4 -vcodec h264 -vb 500k -s 640x360 -pix_fmt yuv420p'
        c += ' -ac 2 -ar 48000 -ab 128k -acodec aac -strict experimental'
        c += ' -movflags faststart'
        c += ' input_low.mp4'
        code = subprocess.call(c.split())
        print('process=' + str(code))
    
        # 低画質m3u8の作成 (input_low.mp4 -> hls/l.m3u8)
        c = 'ffmpeg'
        c += ' -i input_low.mp4'
        c += ' -codec copy -vbsf h264_mp4toannexb -map 0'
        c += ' -f segment -segment_format mpegts -segment_time 5'
        c += ' -segment_list hls/l.m3u8'
        c += ' hls/l_%5d.ts'
        code = subprocess.call(c.split())
        print('process=' + str(code))
    
        # 低画質高画質を含めたm3u8の作成 (->hls/playlist.m3u8)
        t = '#EXTM3U'
        t += '\n##EXT-X-VERSION:3'
        t += '\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000'
        t += '\nl.m3u8'
        t += '\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4000000'
        t += '\nh.m3u8'
        f = codecs.open('hls/playlist.m3u8', 'w', 'utf-8')
        f.write(t)
        f.close()
    
    if __name__ == "__main__":
        create_hls()
    

    실행하면 hls 폴더에 m3u8과 ts가 만들어집니다.


    Http 서버에 넣기



    HLS는 Mac의 Safari와 Windows의 Edge를 지원합니다. 위에서 만든 hls 폴더를 Http 서버에 놓고 다음을 브라우저에서 액세스하십시오.
    http://localhost:8080/hls/playlist.m3u8

    Http 서버가 없다면 파이썬에서도 만들 수 있습니다.
    cd yourdirectory
    (python 2)
    python -m SimpleHTTPServer 8080
    (python 3)
    python -m http.server 8080
    

    HLS 녹화



    HLS ffmepg를 사용하여 녹화합니다. iOS 무료 소프트웨어 "it's my Live"를 사용한 예를 소개합니다 (iOS 전용)
  • HLS 모드를 선택하면 URL이 표시되므로 삼가합니다.
  • 브라우저에서 액세스합니다. 브라우저는 Safari 또는 Edge를 사용하십시오.
  • Wifi의 로컬 넷 전용 (사내 LAN 및 가정 내 LAN)



  • 다음 rec.py를 주소를 변경하여 실행합니다.

    rec.py
    # -*- coding: utf-8 -*-
    import sys, os
    import subprocess
    
    def recode_hls():
        c = 'ffmpeg'
        c += ' -i http://10.255.114.14:8080/my/playlist.m3u8' 要変更
        c += ' -movflags faststart -c copy rec.mp4'
        code = subprocess.call(c.split())
        print('process=' + str(code))
    
    if __name__ == "__main__":
        recode_hls()
    

    주의점
    녹화 rec.mp4는 가능했지만 QickTime에서 재생할 수없는 경우
    다음을 시도하십시오 (aac 사용)
    brew uninstall ffmpeg
    brew install ffmpeg --with-fdk-aac --with-libvo-aacenc
    brew install ffmpeg

    앱 설정의 비트 레이트, 프레임 레이트, 사이즈를 변경해도 녹화 가능했습니다. 1분 이상 길게 녹화해 보거나 재시작해 보는 등 시도해 보세요.

    요약



    RTMP 및 차세대 SRT에는 라이브 서버가 필요합니다. 지연에 대해 걱정하지 않으면 HLS가 쉽습니다. 드라이브 레코더나 회의의 녹화는 대기업이 할 것입니다. 나 같은 중소기업은 틈새 상법으로 들어가고 싶은 곳. 뭔가 좋은 아이디어가 없을까라고 모색하고 있는 곳입니다.

    좋은 웹페이지 즐겨찾기