1. VLC 의 미디어->네트워크 스트림열기->UDP 선택
주소는 VLC 플레이어가 설치된 PC의 주소임(스트리밍 서버의 주소가 아님)
포트는 UDP 데이터를 수신하고자 하는 포트를 기재
시작~ 하고 기다림.
2. 스트리밍 서버가 될 녀석이 아래와 같은 코드로 전송토록 함.
#include
#include
#include
#include
#include
#include
main()
{
char ch[1025];
FILE *fp;
int len;
int sockfd;
int ret;
struct sockaddr_in servaddr;
fp=fopen("media.avi","r");
if(!fp) exit(0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(1234);
inet_pton(AF_INET, "아이피 ㅋㅋ", &servaddr.sin_addr);
sockfd=socket(AF_INET, SOCK_DGRAM, 0);
while(!feof(fp))
{
len=fread(ch, 1, 1024, fp);
ret=sendto(sockfd, ch, len, 0, &servaddr, sizeof(servaddr));
printf("%d:sending %d byte\n", ret, len);
usleep(1000*10);
}
fclose(fp);
}
3. 결과
- 화면에서 플레이가 이뤄지나, UDP 로 데이터가 전달되고 있는 동안은 말소리 엄청 빠름.
- 화면도 정지영상에 가까움.
- 로그를 띄워보니 'header damaged' 라고 나옴.
- 너무 빨라서 그러나 싶어 usleep값을 조절했으나 동일.
4. 그래서..
- MPEG 잘하는 후배녀석(서미)에게 급 도움 요청
- 일반 MPEG파일은 안되고 TS 포맷으로 변환해서 전달해 줘야 한다고 함.
5. 그래서리..
- 다음팟 플레이어로 스트리밍용으로 변환(WMV 변환이라고 해놓고 파일은 AVI로 나옴)
- 암튼, 변환해서리 재시도
6. 그랬더니..
- 안됨. 아예 화면 뜨지도 않음.
- 로그를 보니, "avi demux error: avi module discarded (invalied file)" 이라고 함.
7. 그래가지구서리..
- 파일 변환이 잘못된듯 싶어 파일 변환 다른 툴로 다시 시도..하려다가...
- 그냥 DVD의 VOB 파일을 냅다 열어서 시도..
8. 그랬더니..
- 플레이 되고 음성도 잘 나옴...
- 다만, 패킷을 받는 도중에는 화면 딕딕딕 멈추고 점프하고 음성이 쪼오끔 빨리 진행되는 경향이 아직 있음.
- 정리하면, 플레이는 가능하나 서비스했다간 욕얻어먹기 십상...
9. 결론
- 좀더 알아보자.
10. 그래도 한번더....
- 한번에 보내는 UDP의 크기를 10배(10240)로 올렸더니... 일단 패킷은 잘 간다...
- 근데, 화면이 훅 날라간다. 즉, 네트워크 전송속도에 맞춰 플레이된다는 말..
- 아마 VLC의 버퍼링(캐싱) 설정에 따라서 그런것인듯...
packet 사이즈를 VLC가 좋아하는 1392바이트로 맞춰주고... 전송 간격 조절해주니까 깔끔하게 잘 나옴.
답글삭제자세한 방법 궁금하면 메일 투 미.