Ich habe eine Videodatei in meinem externen Verzeichnis. Wie kann ich es auf Inputstream Variable laden. Vorläufig lese ich Datei im Res/Raw-Ordner, aber ich möchte es von der SD-Karte lesen. Ich weiß auch nicht über den Namen der Datei, aber ihr Weg wird durch Absicht erhalten. überprüfen Sie den folgenden CodeLaden Sie eine Datei aus dem externen Speicher nach Inputstream
public class SonicTest extends Activity
{
VideoView videoView;
String uri;
InputStream soundFile;
File file;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void play(View view)
{
new Thread(new Runnable()
{
public void run()
{
float speed= (float) 1.0;
float pitch= (float) 1.5;
float rate= (float) 1.0;
uri= Environment.getExternalStorageDirectory().toString();
uri=uri+"/video.3gp";
AndroidAudioDevice device = new AndroidAudioDevice(22050, 1);
Sonic sonic = new Sonic(22050, 1);
byte samples[] = new byte[4096];
byte modifiedSamples[] = new byte[2048];
InputStream soundFile = null;
//soundFile = getContentResolver().openInputStream(Uri.parse(uri));
soundFile=getResources().openRawResource(R.raw.video3);
Log.i("testing","check if SoundFile is correct "+soundFile);
int bytesRead;
if(soundFile != null) {
sonic.setSpeed(speed);
sonic.setPitch(pitch);
sonic.setRate(rate);
do {
try {
bytesRead = soundFile.read(samples, 0, samples.length);
} catch (IOException e) {
e.printStackTrace();
return;
}
if(bytesRead > 0) {
sonic.putBytes(samples, bytesRead);
} else {
sonic.flush();
}
int available = sonic.availableBytes();
if(available > 0) {
if(modifiedSamples.length < available) {
modifiedSamples = new byte[available*2];
}
sonic.receiveBytes(modifiedSamples, available);
device.writeSamples(modifiedSamples, available);
}
} while(bytesRead > 0);
device.flush();
}
}
}).start();
}}
Alle drei Antworten nicht verstehen, was ein URI ist, und dass sie Pfad nicht immer eine Datei sind. Wenn du den Dateipfad hättest, hättest du es selbst herausgefunden, aber die geposteten Antworten beantworten einfach nicht die eigentliche Frage. – BooleanCheese