소개
ffserver는 스트리밍(Streaming) 서버 기능을 담당하는 ffmpeg 패키지의 구성 요소의 하나로서 저장된 파일이나 라이브 피드를 입력으로 받아서 트랜스코딩을 거쳐 RTSP나 HTTP 스트리밍을 출력한다.
ffserver.conf
ffserver는 실행 시 이 파일을 읽어서 입출력 조건을 셋팅하게 된다. 이 구성 파일은 크게 두 부분으로 나누어 지는데 입력 피드를 설정하는 <Feed /> 파트와, 출력 스트리밍을 규정하는 <Stream /> 파트로 나누어진다. 하나의 피드(Feed)에 대해 복수개의 스트림(Stream)을 구성할 수 있다. vi ffserver.sample.conf

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 5000
CustomLog -

<Feed feed1.ffm>
  File /tmp/feed1.ffm
  FileMaxSize 1G
  ACL allow 127.0.0.1
</Feed>

<Stream live.swf>
  Feed feed1.ffm
  Format swf
  VideoCodec flv
  VideoFrameRate 25
  VideoBufferSize 80000
  #VideoBitRate 800
  VideoQMin 1
  VideoQMax 5
  VideoSize 720x576
  #PreRoll 0
  NoAudio
#  ACL allow 192.168.0.15 192.168.255.255
#  ACL allow 192.168.0.16 192.168.255.255
</Stream>

<Stream stat.html>
  Format status
  ACL allow localhost
  ACL allow 192.168.0.15 192.168.255.255
  
</Stream>

<Redirect index.html>
  URL http://www.ffmpeg.org/
</Redirect>
        
위 구성에서 주목할 것은 피드명과 스트림명이다. 피드명으로 feed1.ffm을 사용하였고, 스트림명으로는 live.swf를 사용했음을 주목한다. 스트림 섹션에서는 사용하려는 입력 피드의 특성(속도, 크기, 코덱)과 전송 매체를 고려하여 트랜스코딩 파라메터가 셋팅되어야 한다.
ffserver 실행
ffserver -f ffmpeg.sample.conf
입력 피드 공급
이제 ffserver의 피드용으로 사용할 입력을 공급한다. 입력 피드명은 구성 파일에서 지정한 명칭과 일치하여야 한다.
ffmpeg -i test.avi http://localhost:8090/feed1.ffm
ffmpeg -i test.mp4 http://localhost:8090/feed1.ffm
ffmpeg -i test.flv http://localhost:8090/feed1.ffm
스트리밍 뷰어
브라우저 주소창에 http://localhost:8090/live.swf를 입력한다. 이때 live.swf는 구성 파일에서 스트림 섹션에 지정한 스트림명과 일치하여야 한다.
상태 정보
브라우저 주소창에 http://localhost:8090/stat.html을 입력하면 현재 설정된 ffserver의 동작 상태를 볼 수 있다. stat.html도 구성 파일에서 스트림 중 하나로 정의되어 있음을 주목한다.
라이브 피드 스트리밍 - 우분투
ffmpeg -f v4l2 -i /dev/video0 http://localhost:8090/feed1.ffm 만약, v4l2loopback 디바이스가 설치되어 있지 않으면 아래와 같이 설치한다.
sudo apt-get install linux-generic
sudo apt-get install v4l2loopback-dkms
sudo modprobe v4l2loopback
라이브 피드 스트리밍 - OS X
ffmpeg -f qtkit -video_device_index 0 -i "" http://localhost:8090/feed1.ffm 또는
ffmpeg -f qtkit -i "default" http://localhost:8090/feed1.ffm
OS X 에서는 v4l2대신 qtkit를 사용하는데 사용할 인덱스는 아래 명령을 통해서 획득한다.
ffmpeg -f qtkit -list_devices true -i ""