마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

동영상 스트리밍 관련 코드 질문 드립니다.

0 추천
package com.example.user.myapplication;

import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.io.IOException;
import java.nio.ByteBuffer;

public class MainActivity extends AppCompatActivity {

    public final static String VIDEO_URL = "http://sites.google.com/site/ubiaccessmobile/sample_video.mp4";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MediaExtractor extractor = new MediaExtractor();
        try {
            extractor.setDataSource(VIDEO_URL);
        } catch (IOException ex) {

        }
        int numTracks = extractor.getTrackCount();
        for (int i = 0; i < numTracks; ++i) {
            MediaFormat format = extractor.getTrackFormat(i);
            String mime = format.getString(MediaFormat.KEY_MIME);

            extractor.selectTrack(0);

        }
        ByteBuffer inputBuffer = ByteBuffer.allocate(1024);


        while (extractor.readSampleData(inputBuffer,0) >= 0) {
            int trackIndex = extractor.getSampleTrackIndex();
            long presentationTimeUs = extractor.getSampleTime();

            extractor.advance();
        }

        extractor.release();
        extractor = null;
    }
}
 
코드 실행하려고 하는데 while문 안에 있는 
readSampleData를 호출 할 때 자꾸 source code does not match the bytecode오류가 나네요. IllegalArgumentException여기서 예외처리도 되고요.
안드로이드 시작하는 단계라 사소한 문제도 자꾸 질문 드리게 되네요ㅠㅠ
 
도움이 될지는 모르겠지만 로그도 같이 올려드려요
05-29 20:24:07.033 10384-10384/com.example.myapplication E/NuCachedSource2: readAt:Timeout ( player case ) checkTimeOut[0]
딘새 (360 포인트) 님이 2017년 5월 29일 질문
딘새님이 2017년 5월 29일 수정

1개의 답변

+1 추천
 
채택된 답변

ByteBuffer.allocate(1024); 이 잘 못 되었습니다. H264 패킷 사이즈 1024 넘을 경우 사이즈 부족으로 읽지 못해서 오류가 나는겁니다.

MediaForamt에서 KEY_MAX_INPUT_SIZE 구해 넣던지, KEY_WIDTHKEY_HEIGHT 로 가로 세로 길이 구해서,

2배(칼라정보)정도 한 사이즈를 넣어주셔야 합니다.

 무작정 짜지 마시고  Exoplayer 코드를 참조해보세요.

 

익명사용자 님이 2017년 5월 30일 답변
2017년 5월 30일 수정
감사합니다.
아직 안드로이드는 익숙하지 않은데 도움이 많이 되네요
...