wake-up-neo.com

Android Media Stream Fehler? Java.io.FileNotFoundException: Kein Inhaltsanbieter: http: //

Ich folgte this , um Stream Radio in Android zu spielen 

Hier funktioniert es gut, aber Player Loading Bit Langsam nach dem Klicken muss ich 30 Sekunden warten

Aber ich bekomme diesen Fehler in der Konsole

MediaPlayer: setDataSource IOException happend : 
Java.io.FileNotFoundException: No content provider: http://www.example.com:8000/live.ogg
at Android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.Java:1074)
at Android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.Java:927)
at Android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.Java:854)
at Android.media.MediaPlayer.setDataSource(MediaPlayer.Java:1087)
at Android.media.MediaPlayer.setDataSource(MediaPlayer.Java:1061)
at org.oucho.radio.Player.playLaunch(Player.Java:237)
at org.oucho.radio.Playlist.onPostExecute(Playlist.Java:98)
at org.oucho.radio.Playlist.onPostExecute(Playlist.Java:35)
at Android.os.AsyncTask.finish(AsyncTask.Java:632)
at Android.os.AsyncTask.access$600(AsyncTask.Java:177)
at Android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.Java:645)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:145)
at Android.app.ActivityThread.main(ActivityThread.Java:5951)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1400)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1195)

Im Link sehen Sie alle Dateien wie player etc

Aufgrund dieses Fehlers ist mein Stream langsam. Bitte helfen Sie mir bei diesem Typ

Hier ist dieser Fehler nicht bei der .ogg Datei, die ich mit .mp3 und nur /live versucht habe. 

http://www.example.com:8000/beet.ogg
http://www.example.com:8000/mouthorgan.mp3
http://www.example.com:8000/live

Das Audio wird aber nach diesem Fehler abgespielt. Es dauert ungefähr 30 Sekunden. Manchmal dauert es zu lange ... Wenn ich es abspiele, zeigt es diesen Fehler und dann die Verbindung zum Server .. und das Abspielen

bitte hilf mir das zu beheben

22
Whats Going On

Java.io.FileNotFoundException: Kein Inhaltsanbieter: http://www.example.com:8000/live.ogg

Da versucht wird, als Datei vom Geräte-Contentprovider basierend auf dem Kontext geladen zu werden und Sie als URL übergeben werden.

Anscheinend liegt Ihr Problem in der Einstellung der Datenquelle auf den Mediaplayer. Während Sie versuchen, URL oder Streaming abzuspielen, die für die Methode setDataSource ohne Kontext erforderlich waren.

Ich war beim Livestreaming mit demselben Problem konfrontiert. und unterhalb des Codes wurde mein Problem behoben.

PlayerScreen

        public class PlayerScreen extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.player);
            startService(new Intent(this, MediaPlayerService.class));
            findViewById(R.id.btnChangeTrack).setOnClickListener(clickListener);
            findViewById(R.id.btnStartMediaPlayer).setOnClickListener(clickListener);
            findViewById(R.id.btnStopMediaPlayer).setOnClickListener(clickListener);
            ToggleButton toggleButton = (ToggleButton) findViewById(R.id.togglePauseResume);
            toggleButton.setOnCheckedChangeListener(checkedChangeListener);
            /*
            * To get url which is passing from the previous activity listitem click.
            * If url which is pass from listitem click is not empty it will start player
            * */
            String url = getIntent().getStringExtra("url");
            if (!TextUtils.isEmpty(url))
                startMediaPlayer(url);

        }

        private ToggleButton.OnCheckedChangeListener checkedChangeListener = new ToggleButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!isChecked) {
                    Intent intent = new Intent();
                    intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                    intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PAUSE_MEDIA_PLAYER);
                    sendBroadcast(intent);
                } else {
                    Intent intent = new Intent();
                    intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                    intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.RESUME_MEDIA_PLAYER);
                    sendBroadcast(intent);
                }
            }
        };
        private View.OnClickListener clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent;
                switch (v.getId()) {
                    case R.id.btnChangeTrack:
                        intent = new Intent();
                        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.CHANGE_PLAYER_TRACK);
                        intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, "http://www.example.com:8000/live");
                        sendBroadcast(intent);
                        break;
                    case R.id.btnStartMediaPlayer:
                        startMediaPlayer("http://www.example.com:8000/beet.ogg");
//startMediaPlayer("http://108.163.197.114:8071/listen.pls");
                        break;
                    case R.id.btnStopMediaPlayer:
                        intent = new Intent();
                        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.STOP_MEDIA_PLAYER);
                        sendBroadcast(intent);
                        break;

                }
            }
        };

        @Override
        protected void onResume() {
            super.onResume();
            registerReceiver(receiverFromservice, new IntentFilter(MediaPlayerService.SERVICE_TO_ACTIVITY));
        }

        private String currentPlayerStatus = "N/A";
        private BroadcastReceiver receiverFromservice = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (MediaPlayerService.SERVICE_TO_ACTIVITY.equalsIgnoreCase(action)) {
                    /*
                    * To get current status of player
                    * */
                    currentPlayerStatus = intent.getStringExtra(MediaPlayerService.PLAYER_STATUS_KEY);
                    Log.e("Player Mode", "" + currentPlayerStatus);
                }
            }
        };

        @Override
        protected void onPause() {
            super.onPause();
            unregisterReceiver(receiverFromservice);
        }

        /**
         * TO start media player.It will send broadcast to Service & from service player will start
         *
         * @param url
         */
        public void startMediaPlayer(String url) {
            Intent intent = new Intent();
            intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
            intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PLAY_MEDIA_PLAYER);
            intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, url);
            sendBroadcast(intent);
        }
    }

MediaPlayerService

public class MediaPlayerService extends Service {
    public static final String BROADCAST_TO_SERVICE = "com.mediaplayer.playerfunction";
    public static final String SERVICE_TO_ACTIVITY = "com.mediaplayer.currentPlayerStatus";
    public static final String PLAYER_FUNCTION_TYPE = "playerfunction";
    public static final String PLAYER_TRACK_URL = "trackURL";
    public static final int PLAY_MEDIA_PLAYER = 1;
    public static final int PAUSE_MEDIA_PLAYER = 2;
    public static final int RESUME_MEDIA_PLAYER = 3;
    public static final int STOP_MEDIA_PLAYER = 4;
    public static final int CHANGE_PLAYER_TRACK = 5;
    public static final String PLAYER_STATUS_KEY = "PlayerCurrentStatus";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        IntentFilter intentFilter = new IntentFilter(BROADCAST_TO_SERVICE);
        registerReceiver(playerReceiver, intentFilter);
        if (mPlayer != null && mPlayer.isPlaying()) {
            sendPlayerStatus("playing");
        }
        return START_STICKY;
    }

    private BroadcastReceiver playerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BROADCAST_TO_SERVICE.equalsIgnoreCase(action)) {
                String trackURL = intent.hasExtra(PLAYER_TRACK_URL) ? intent.getStringExtra(PLAYER_TRACK_URL) : "";
                int function = intent.getIntExtra(PLAYER_FUNCTION_TYPE, 0);
                switch (function) {
                    case CHANGE_PLAYER_TRACK:
                        changeTrack(trackURL);
                        break;
                    case STOP_MEDIA_PLAYER:
                        stopPlayer();
                        break;
                    case PLAY_MEDIA_PLAYER:
                        startMediaPlayer(trackURL);
                        break;
                    case PAUSE_MEDIA_PLAYER:
                        pausePlayer();
                        break;
                    case RESUME_MEDIA_PLAYER:
                        resumePlayer();
                        break;
                }

            }
        }
    };
    private MediaPlayer mPlayer;

    private void pausePlayer() {
        if (mPlayer != null && mPlayer.isPlaying()) {
            mPlayer.pause();
            sendPlayerStatus("pause");
        }
    }

    private void resumePlayer() {
        if (mPlayer != null && !mPlayer.isPlaying()) {
            mPlayer.start();
            sendPlayerStatus("playing");
        }
    }

    private void changeTrack(String url) {
        stopPlayer();
        startMediaPlayer(url);

    }

    private void stopPlayer() {
        if (mPlayer != null) {
            mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
            sendPlayerStatus("stopped");

        }
    }

    public void startMediaPlayer(String url) {
        if (TextUtils.isEmpty(url))
            return;
        if (mPlayer == null)
            mPlayer = new MediaPlayer();
        try {
            mPlayer.setDataSource(url);
            mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    if (extra == MediaPlayer.MEDIA_ERROR_SERVER_DIED
                            || extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
                        sendPlayerStatus("erroronplaying");
                    } else if (extra == MediaPlayer.MEDIA_ERROR_IO) {
                        sendPlayerStatus("erroronplaying");
                        return false;
                    }
                    return false;
                }
            });
            mPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {

                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    Log.e("onBufferingUpdate", "" + percent);

                }
            });
            mPlayer.prepareAsync();
            mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                public void onPrepared(MediaPlayer mp) {
                    mPlayer.start();
                    sendPlayerStatus("playing");
                }
            });
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    Log.e("onCompletion", "Yes");
                    sendPlayerStatus("completed");
                }
            });
            mPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    return false;
                }
            });
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendPlayerStatus(String status) {
        Intent intent = new Intent();
        intent.setAction(SERVICE_TO_ACTIVITY);
        intent.putExtra(PLAYER_STATUS_KEY, status);
        sendBroadcast(intent);
    }
}

player.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <TextView
        Android:id="@+id/section_label"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/ab_tool"
        Android:text="Home" />

    <Button
        Android:id="@+id/btnStartMediaPlayer"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/section_label"
        Android:text="Start Player" />


    <ToggleButton
        Android:id="@+id/togglePauseResume"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/btnStartMediaPlayer"
        Android:checked="true"
        Android:textOff="Resume"
        Android:textOn="Pause" />

    <Button
        Android:id="@+id/btnChangeTrack"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/togglePauseResume"
        Android:text="Chanage Track" />

    <Button
        Android:id="@+id/btnStopMediaPlayer"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/btnChangeTrack"
        Android:text="STOP" />
</RelativeLayout>

Manifest

<activity Android:name=".PlayerScreen">

    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />


        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<service Android:name=".MediaPlayerService"></service>

Um Daten aus Streaming-URL-Header-Daten zu erhalten, können Sie [diese Antwort überprüfen] [2] 

Zu Testzwecken habe ich hier zwei URLs verwendet

UPDATEPlayerActivity 

public class PlayerScreen extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.player);
        startService(new Intent(this, MediaPlayerService.class));
        /*
        * To get url which is passing from the previous activity listitem click.
        * If url which is pass from listitem click is not empty it will start player
        * */
        String url = getIntent().getStringExtra("url");
        if (!TextUtils.isEmpty(url))
            startMediaPlayer(url);

    }

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(receiverFromservice, new IntentFilter(MediaPlayerService.SERVICE_TO_ACTIVITY));
    }

    private String currentPlayerStatus = "N/A";
    private BroadcastReceiver receiverFromservice = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (MediaPlayerService.SERVICE_TO_ACTIVITY.equalsIgnoreCase(action)) {
                /*
                * To get current status of player
                * */
                currentPlayerStatus = intent.getStringExtra(MediaPlayerService.PLAYER_STATUS_KEY);
                Log.e("Player Mode", "" + currentPlayerStatus);
            }
        }
    };

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiverFromservice);
    }

    /**
     * TO start media player.It will send broadcast to Service & from service player will start
     *
     * @param url
     */
    public void startMediaPlayer(String url) {
        Intent intent = new Intent();
        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PLAY_MEDIA_PLAYER);
        intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, url);
        sendBroadcast(intent);
    }
}

lass es mich wissen.

14
user1140237

Gehen Sie zu dieser Datei https://github.com/Old-Geek/Radio/blob/master/app/src/main/Java/org/oucho/radio/Player.Java#L234 und ändern Sie sie 

player.setDataSource(context, Uri.parse(url));

zu

player.setDataSource(url)

Das Problem ist, dass void setDataSource (String path) die zu verwendende Datenquelle (Dateipfad oder http/rtsp-URL) festlegt. 

path String: der Pfad der Datei oder die http/rtsp-URL des Streams, den Sie abspielen möchten

der github-Code verwendet void setDataSource (Context context, Uri uri), wobei angenommen wird, dass uri eine Form von ContentProvider hat.

kontext Kontext: Der Kontext, der beim Auflösen des Uri verwendet werden soll
uri Uri: Die Inhalts-URI der Daten, die Sie abspielen möchten

23
Anurag Singh

Bei Android 9+ kann der klare http-Netzverkehr dieses Problem verursachen. Überprüfen Sie diese Option: Android 8: Klartext-HTTP-Datenverkehr nicht zulässig

1
Yazon2006

Dieser Fehler tritt auch auf, wenn diese Internetberechtigung nicht in der Manifest.xml enthalten ist

<uses-permission Android:name="Android.permission.INTERNET" />
1
s-hunter