|
어려운 상황이네요..
일단, 동영상 파일의 내용을 직접 압축을 하거나 어쩌고 해서 전송을 하는 방법이 있는데, 이것 역시 많은 전송량이 필요하겠죠. 특히나, Divx처럼 KeyPoint(바뀐 부분만 그려주는 방식)를 이용하는 방식은, 화면 크기를 조절해서 데이터를 새로 뽑아서 전송한다 하더라도, 그 디코딩과 재인코딩 시간들 때문에, 컴퓨터 3대만 물리면 서버가 버벅거릴것 같고요.. 또한 전제가.. 해당하는 동영상 파일의 구조를 확실히 알아야 한다는 것인데.. 이게 어디 쉬운일입니까.. -_-a
그래서, 생각한 방식이 동영상을 뿌려주는 동안에, 화면을 캡쳐해서 Divx과 비슷한 기능을 해본다는 것이었습니다. 화면을 캡쳐해서 Pixel을 비교하고 변경된 부분만 뿌려주는 방식을 사용했죠. 아무래도 픽셀로 처리를 하다보니 화면 크기도 이리저리 변경하기가 아주 수월했고 전송량도 엄청나게 줄었습니다.
하지만, 문제가 있었습니다. 동영상은 캡쳐시에 KeyPoint에 따라 어쩔때는 검은 화면만 캡쳐 될 수도 있다는 점입니다. HyperSnap 같은 프로그램은 놓치지 않고 캡쳐를 하는데, 어떻게 해야지 캡쳐를 해낼 수 있을까 고민하다가 윈도우의 화면을 다시 쓰게 하는 방법을 생각했습니다.
조금 재밌는 현상이 발생되더군요. 다시 그리게 되면, 화면에 있는 내용이 변경된다는 점입니다. 사진을 찍을때 흔들릴때 보이는 현상이 보이더군요. 화질은 뚜렷하지 않았지만, 캡쳐는 확실히 되었습니다. 하지만, 문제는 속도가 너무 걸린다는 점이었죠.
그래서, 다시 생각한 방법이, 이전 도스 프로그램에서 Display 라는 프로그램에서 사용한 프레임을 처리하는 방식이었습니다. 물론, 제 능력으로는 AVI, MPEG 등 각각의 모든 파일 형식의 프레임을 뽑아올 재간이 되지 않아.. 재생할 수 있는 동영상 파일도 어느정도 제한을 두고, 컴포넌트 중에서 화면을 그릴때, 현재 프레임의 정보를 프로퍼티로 얻을 수 있는 컴포넌트로 화면의 정보를 뽑아왔습니다.
조금 오래되서 어떤 컴포넌트를 썼는지 기억이 가물가물 하지만, DirectShow와 연관이 있었던것 같습니다.
더 좋은 방법이 있을지는 모르겠군요... -_-a
하느리 님이 쓰신 글 :
: 우선 답변 감사드립니다.
: 제가 너무 간략하게 질문을 올렸나 봅니다. (죄송)
: 경황중에 오린 질문이다 보니 제대로 올리지를 못했네요.
:
:
: 현재 개발하여야 하는 것은 avi, mpeg 등의 동영상 파일을 서버에서 틀면 서버에 접속해 있는 클라이언트에도 해당 내용의 "영상" 및 "사운드"가 나타나는 일종의 인터넷 방송과 비슷한 형태의 서버, 클라이언트 개발입니다. 개발 제한 사항은 "Windows 98계열의 OS"에서 서버 및 클라이언트가 돌아간다는 것입니다. NT계열이라면 WMT 서버를 이용해 보겠으나, 98계열이다 보니 이를 이용할 수도 없고 하여 다른 방법을 찾고 있습니다.
:
: 가장 단순무식하게 생각하면 동영상파일을 몽땅 전송해 주고 그거를 MediaPlayer 컴포넌트를 이용하여 돌리면 되겠지만, 동영상파일이 어디 단순한 크기의 파일입니까 ? 기본적으로 MBytes 단위이다 보니 미치지(-_-;;) 않은 다음에야 이런 방법을 사용하겠습니까 ?
: 개발시간이라도 많으면 avi, mpeg 등의 파일의 헤더를 파악하고 처리하겠는데, 시간이 너무 부족한 관계로 기(記) 개발된 것(컴포넌트 등)이 있다면, 그걸 이용할려구 하고 있습니다.
:
: 이와 관련하여 아시는 내용이 있으면 좀 알려 주세요. ^^
:
:
:
:
: 유영인 [Chris] 님이 쓰신 글 :
: : 일반적인 전송 방법으로 한다면.. 속도가 많이 안나오겠죠..? 화면 크기도.. 어느정도로 제한을 두셔야 할것 같습니다. 그렇지 않으면.. 속도가 나오기 힘들겠죠..
: :
: : 1. 화면을 캡쳐한 뒤, 보여줄 크기만큼으로 축소
: : 2. 축소된 비트맵에서 바로 이전의 비트맵과 비교하여 Pixel Color가 다른 곳을 뽑아내서, int 형으로 연산시킴. 만약, 똑같다면 -1 값을 사용.
: : 3. 연산된 값의 픽셀들을 String으로 길게 늘어뜨림
: : 4. 압축 알고리즘으로 해당 String을 압축 (화면 크기가 작으면, 오히려 압축이 더 비효율 적입니다)
: :
: :
: : 몇가지 문제점이 있었는데, 제일 큰 문제는.. 서버에서 화면을 캡쳐할때, 동영상은 캡쳐가 잘 되지 않는다는 점입니다. 그래서 임시 방편으로, 동영상을 멈춘후에, 윈도우에서 화면을 다시 그리게 하고 캡쳐를 했던 기억이 나네요. 역시.. 속도가 많이 떨어지고 비디오 카드마다 다른 성능을 보이는, 별로 좋지 않은 방법이었습니다..
: :
: : 그리고, 전송은 소켓으로 해당 값을 스트림 전송시키시면 됩니다.
: :
: : 하느리 님이 쓰신 글 :
: : : 한대의 서버에 다수의 클라이언트가 물려 있는 상황에서 서버에서 디스플레이하는 동영상을 클라이언트에도 전송하면서 보이게 하고 싶은데, 방법이 영 떠오르지를 않네요. 어떤 방법을 이용하면 될까요 ?
: : :
|