2013-02-09 2 views
4

내 코드의 일부 지점에서 앱은 .m3u8 파일을 가리키는 URL을 찾습니다. 이 다음에 일어날 것입니다 :android 2.3에서 HTTPS를 통해 .m3u8 파일 재생

mVideoView.setVideoURI(Uri.parse(feed.getUrl().toString())); // feed.getUrl returns the url 
mVideoView.start(); 

를 그리고 3.1 안드로이드에서 잘 작동합니다. 아니 이전 버전에 HTTPS를 사용하기 때문에 (이 참조 : http://developer.android.com/guide/appendix/media-formats.html를) 내가 한 그래서

것은 내가 vitamio를 사용하여 안드로이드 2.2에 대한보다 쉽게하기로했다 라이브러리 내 응용 프로그램의 새 버전을 생성 나를. 그러나 여기서 (android.widget.VideoView)를 완벽하게 처리, (io.vov.vitamio.widget.VideoView는) 스트림을로드하는 데 시간이 오래 걸리고 충돌이 잠시 말을 끝 :

Log when loading the .m3u8

하지만이 URL을로드하려고하면 : http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8 잘 작동합니다! 나는이 하나는 애플 샘플 사이에 볼 수 있습니다

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=264000 
playlist.m3u8?session=003016302664236&index=0 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1364000 
playlist.m3u8?session=003016302664236&index=1 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=44000 
playlist.m3u8?session=003016302664236&index=2 

그래서 주요 차이점 :

내가 여기 내가 사용하는 데 필요한 URL을 공유 할 수는 없지만 그것을가 가리키는 .m3u8의 내용입니다 하나, https를 사용하고 있습니다. 내 파일이 다른 .m3u8 파일을 가리키고 있습니다 (Apple의 .m3u8은 .ts 파일을 가리키고 있습니다). 둘 다 AAC 오디오를 사용하는 것 같습니다.

문제는 vitamio와 관련이있는 것으로 보입니다. 이 충돌 사고를 어떻게 피할 수 있습니까? 고맙습니다.

답변

4

해결책을 찾았습니다!

그래서 내가 먼저 말해야 할 것은 혼란스럽고 HTTPS를 사용하지 않았지만 내 솔루션 역시 https에서 작동해야한다는 것입니다.

처음에는 진저 브레드가 라이브 스트리밍을 지원하지 않기 때문에 (아마도 this으로 읽음) Vitamio를 사용해야 할 것입니다. 이제 문제는 M3u8 파일이 .ts 파일의 목록 일 경우 제대로 작동해야한다는 것입니다. 하지만 다른 m3u8 파일을 가리키고 있다면 ..

글쎄, 당신은 직접 파싱해야 할 것입니다. 다음과 같이이 방법을 사용할 수 있습니다.

url = new URL(livetvchannel.getUrl()); 
InputStream M3U8 = (InputStream) url.getContent();  
BufferedReader br = new BufferedReader(new InputStreamReader(M3U8)); 
for(int i = 0; i < 2; ++i) 
    br.readLine(); 
String target = br.readLine(); //this parses the third line of the playlist 
br.close(); 
url = new URL(baseURL.concat(target)); 
//if the m3u8 url is relative, you have to concat it with the path 
//Note: You have to do all this in a thread, you can't do network on UiThread 


mVideoView.setVideoURI(Uri.parse(url.toString())); //Run this on UiThread 

url이 비디오 스트림을 가리 킵니다. 그리고 거기에 간다! 결국 힘든 것이 아니 었습니다. :)

+3

하지만 파싱 한 후 장치의 대역폭을 어떻게 알 수 있습니까? 대역폭에 따라 적절한 m3u8 링크를 선택해야합니다. 적합한 비트 전송률의 적절한 방법입니다. –

관련 문제