3

AndroidのMediaPlayerで特定の.3gpファイル(Dropboxリンクから)を再生するのに問題があります。ただし、ファイルはDropboxAndroidアプリから問題なく魔法のように再生されます。

私はこれを使ってそれをプレイしようとしています:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.dropbox.com/s/zpiqwmxka6llavt/SketchyFile.3gp"));
startActivity(intent);

そして私のマニフェストには

<uses-permission android:name="android.permission.INTERNET" />

「このビデオを再生できません」というエラーが表示されます。

エラー-スクリーンショット

Logcatは次のことを示しています。

I/NuCachedSource2(89): new range: offset= 2245017
I/ChromiumHTTPDataSource(89): connect to https://dl.dropbox.com/0/view/a1crokuhpprsaeo/SketchyFile.3gp @2245017
I/NuCachedSource2(89): ERROR_END_OF_STREAM
E/MediaPlayer(3629): error (1, -2147483648)
E/MediaPlayer(3629): Error (1,-2147483648)
D/VideoView(3629): Error: 1,-2147483648

Dropbox Androidアプリから再生しようとしても、Dropboxのビデオプレーヤーで問題なく再生できます。

ドロップボックス-成功-スクリーンショット

ffmpegのffprobeツールによると、メディアタイプがAndroidにとってエキゾチックなものではないことを確認できました。

Dropboxは奇妙なトランスコーディングブードゥーを実行していますか?これを同様の方法で機能させる方法はありますか?

編集:DropBoxのエンコーディングブードゥーについての洞察がもう少しあります。

4

2 に答える 2

3

ドロップボックスアプリのソースも実際のファイルへのアクセスも持っていないので、ここではいくつかの仮定に基づいて作成するのが最善のケースです。

ファイルはネイティブアプリで再生できない形式であるため、ネイティブアプリで再生できません。ファイルをダウンロードしてSDカードに入れてから再生すると言えますか?そうでない場合、電話はこのフォーマットをサポートしていません。

ドロップボックスプレーヤーがそれを再生するのはなぜですか?同じ仮定に基づく私の推測では、ドロップボックスプレーヤーはjniの下に独自のデコードライブラリ(例:ffmpeg)を追加します。したがって、これをデコードできます。

別の考えられる推測:不可能な3gpファイルのストリーミング再生を行おうとしています。HTTPpd再生が可能である可能性があります。繰り返しますが、ダウンロードしてSDカードから再生します。再生される場合は、おそらくこれが問題です。このファイルは、必要なヒントがない場合があります。

ドロップボックスアプリが他のAPIを介してファイルの最後にあるヘッダー(ブードゥー)に何らかの形でアクセスしているため、ドロップボックスがこれを再生していますか?

繰り返しになりますが、上記の両方は、ドロップボックスアプリのソース、ファイルへのアクセス、またはネイティブプレーヤーを使用してビデオを再生しようとしている方法を正確に把握していないため、よくある問題からの推測です。おそらく、上記のヒントの1つが役立ちます。幸運を!

編集:見られる問題:NexusSはローカルまたはhttpリンクから指定されたファイルを再生しません。mp4にリマックスすることで、NexusSは双方向で再生できるようになりました。これは、一部のAndroidデバイスのローカルネイティブプレーヤーに3gpサポートがないことを意味します。

于 2012-12-10T21:27:05.813 に答える
-1

次のように使用できtry-catchます:

try
{
  VideoView videoView = (VideoView) findViewById(R.id.VideoView);         
  MediaController mediaController = new MediaController(this);
  mediaController.setAnchorView(videoView);
  // Set Audio/Video
  String strfilename = "http://example.com/video.mp4";
  Uri video = Uri.parse(strfilename);
  videoView.setMediaController(mediaController);
  videoView.setVideoURI(video);
  videoView.start();   
} 
catch (Exception e) 
{
  //enter code here
  //Handle Errors
} 
于 2014-11-12T08:00:28.417 に答える