Programming/기타

[Android]어플리케이션이 내부 미디어플레이어를 이용할 때 네트워크 사용량 측정법?

라우드니스 2013. 3. 9. 01:33

안드로이드의 YouTube 어플리케이션이나 웹 브라우저를 사용해서 동영상을 봐도 YouTube나 웹 브라우저의 네트워크 통계에는 적용되지 않는 것을 볼 수 있다.

 

이는 YouTube나 웹 브라우저가 자기 자신이 아닌 내부의 미디어 플레이어를 이용해서 동영상을 틀어주기 때문이다.

 

실제 동영상 스트리밍 서비스까지 구현을 해본 적이 없어서 이런 것이 어떠한 방식으로 진행이 되는지 감도 못 잡고 삽질만 하다가 드디어 조금은 실마리를 잡은 것 같다.

 

/proc/net/tcp 파일을 cat 등으로 읽으면 다음과 같은 결과를 얻을 수 있다.

/proc/net/tcp에 대한 자세한 정보는 이 곳 에서 /proc/net/tcp로 찾으면 확인할 수 있다.

 

간단히 말하면 TCP socket의 현재 내용을 dump하는 곳이다.

 

평상시에는 UID 0번 (안드로이드 커널)만 잡히고 있다가

Youtube나 웹 브라우저에서 동영상을 보면 그림과 같이 UID가 1013(Android mediaserver라고 함.) 인 tcp socket이 하나 더 생기게 된다.

 

그리고 /proc/uid_stat/1013에 들어가서 tcp_rcv와 tcp_snd의 값을 cat 등을 이용해 확인해 보면 동영상 트래픽이 제대로 측정되고 있는 것을 확인할 수 있다.

 

 

여기서 문제는 트래픽을 모니터링 하는 프로그램을 만들었을 시 이를 어떻게 인식하고 합에 추가하냐는 것이다.

 

삼성 기본 모니터링? 프로그램으로 알고 있는데 해당 프로그램처럼 안드로이드 내부에서 돌아가게 하는 프로그램도 하나로 측정되게 하고 싶다.

 

A라는 프로그램이 미디어서버(혹은 안드로이드 내부 시스템)를 호출했다는 사실을 확인할 수 있다면 간단히 해결될 것 같은데 이를 확인하는 리눅스 파일이나 안드로이드 클래스가 보이질 않는다...

 

생각으로는 핸드폰의 특성상 미디어서버가 돌아가게 될 경우 가장 마지막까지 화면에 있던 프로그램이 미디어서버를 호출했을 것 같지만 내 추측으로 정확한 프로그램을 만들 수 있을 것 같지는 않다.

 

진짜 네트워크를 하나로 모아서 보여주는 프로그램 소스코드라도 구하고 싶은 심정이다…

반응형