기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
지금 졸업작품으로 임베디드 시스템을 이용한 프로젝트를 진행하고 있습니다. 이제 막 임베디드 시스템과 리눅스를 배우고 있는 상태라 많은 어려움이 있습니다.
현재 임베디드 보드는 g100-s3c6410사용하고 있습니다. 여기에다가 무선공유기와 webcam을 usb를 통해 연결 하였습니다. 보드에다가 ffmpeg을 포팅한 상태이고 ffserver를 통해 webcam에서 받은 영상데이터를 스트리밍 서버를 이용해 보내고 있습니다.
현재 노트북에서 실행했을 경우 0.5초정도의 아주 작은 딜레이만 발생하지만 보드에서 실행했을 경우 대략 2초정도의 딜레이가 생깁니다. 아무리 설정값을 바꾸고 해보아도 딜레이가 줄어들지 않네요....
해결책이 있으시다면 알려주세요...
제 생각에는 아마 보드와 노트북의 cpu사양에 따라 인코딩과 디코딩에 대한 속도차이 때문인거 같은데....저의 부족한 실력으로는 ffmpeg소스를 이해하는게 무척 힘든 일인거 같습니다. ffmpeg소스에 관련된 소스만 몇천줄이고, 그리고 driver, codec, filter등....봐야 되는 소스들이 정말 많더라고요...그래서 어떻게 흘러가는지 감도 못잡고 있습니다. 어떻게 프로젝트를 진행해 나가야 될지 상세히 알려주시면 감사하겠습니다.
코덱이나 설정에 따라 지연시간이 달라집니다.
기본적으로 카메라 -> AP의 메모리 -> 인코딩 -> 네트워크 전송 (Send buffer) -> 네트워크 -> 수신(Recv Buffer) ->디코딩 -> 화면
요런 순서 인데..지연 시간을 각 구간에서 찍어보시고.. 지연이 큰쪽을 공략해야 합니다. 보통 인코딩이 제일 큰데요..
프레임 드랍이 생기지 않는다면 인코딩은 fps 시간내에 이루어지는 겁니다. (30fps라면 1/30초)
지연시간은 GoP가 너무 크거나 참조 프레임수가 많아서 인코딩이 완료되는데까지 시간이 커지게 되는 문제가 생깁니다. ( Throughput 은 30fps가 나오는데 지연 시간이 커지는 문제 )
제일 간단한 것은 모두 Intra frame압축을 하면 참조 프레임이 없기 때문에 바로바로 인코딩되어서 결과가 나옵니다. ( 대신 압축율 저하..화질 저하...)
mjpeg등으로 한번 해보세요. H.264등을 이용하시면 Baseline으로 해보시구요.
속도가 느린 것입니다....
pc랑은 당연히 차이가 있습니다.
위의 해결 방법은
1. 영상 크기를 줄여야 합니다.
2. bitrate도 줄여야 합니다.
3. 어쩔 수 없다면 S3C6410에 들어 있는 hardware codec인 MFC를 살려서 동작시켜야 합니다.
ffmpeg 소스는 현재 상황에서는 손댄다고 해서 증상이 나아지기는 힘듭니다.
제 의견으로는요...
저라면 영상 사이즈를 줄이는 쪽으로 일단 try를 해 보고,
S3C6410이니 관련 동영상 encoder 코드를 구하실 수 있을겁니다.
최후는 어쩔 수 없이 hw를 써야 할 듯 하네요.