首页 > 解决方案 > Android Studio ExoPlayer 我错在哪里

问题描述

我正在尝试通过此 URI 进行流式传输:

rtsp://192.168.43.123:8080/h264_pcm.sdp

我刚试过,VideoView但延迟是 20 秒或更长时间

所以我对 ExoPlayer 感兴趣,但我有这个错误

2021-07-11 12:25:17.962 29357-30421/com.l3.m4o E/ExoPlayerImplInternal: Playback error
  com.google.android.exoplayer2.ExoPlaybackException: Source error
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:580)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:246)
    at android.os.HandlerThread.run(HandlerThread.java:67)
 Caused by: java.net.ConnectException: failed to connect to /192.168.1.102 (port 8080) from /:: (port 59858): connect failed: ECONNREFUSED (Connection refused)
    at libcore.io.IoBridge.connect(IoBridge.java:142)
    at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:621)
    at java.net.Socket.connect(Socket.java:570)
    at java.net.Socket.<init>(Socket.java:450)
    at java.net.Socket.<init>(Socket.java:218)
    at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:279)
    at com.google.android.exoplayer2.source.rtsp.RtspClient.getSocket(RtspClient.java:248)
    at com.google.android.exoplayer2.source.rtsp.RtspClient.start(RtspClient.java:157)
    at com.google.android.exoplayer2.source.rtsp.RtspMediaPeriod.prepare(RtspMediaPeriod.java:145)
    at com.google.android.exoplayer2.source.MaskingMediaPeriod.prepare(MaskingMediaPeriod.java:145)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.maybeUpdateLoadingPeriod(ExoPlayerImplInternal.java:1931)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.updatePeriods(ExoPlayerImplInternal.java:1911)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:911)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:478)
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:246) 
    at android.os.HandlerThread.run(HandlerThread.java:67) 
 Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
    at libcore.io.Linux.connect(Native Method)
    at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:138)
    at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
    at libcore.io.IoBridge.connectErrno(IoBridge.java:156)
    at libcore.io.IoBridge.connect(IoBridge.java:134)
    at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) 
    at java.net.Socket.connect(Socket.java:621) 
    at java.net.Socket.connect(Socket.java:570) 
    at java.net.Socket.<init>(Socket.java:450) 
    at java.net.Socket.<init>(Socket.java:218) 
    at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:279) 
    at com.google.android.exoplayer2.source.rtsp.RtspClient.getSocket(RtspClient.java:248) 
    at com.google.android.exoplayer2.source.rtsp.RtspClient.start(RtspClient.java:157) 
    at com.google.android.exoplayer2.source.rtsp.RtspMediaPeriod.prepare(RtspMediaPeriod.java:145) 
    at com.google.android.exoplayer2.source.MaskingMediaPeriod.prepare(MaskingMediaPeriod.java:145) 
    at com.google.android.exoplayer2.ExoPlayerImplInternal.maybeUpdateLoadingPeriod(ExoPlayerImplInternal.java:1931) 
    at com.google.android.exoplayer2.ExoPlayerImplInternal.updatePeriods(ExoPlayerImplInternal.java:1911) 
    at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:911) 
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:478) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:246) 
    at android.os.HandlerThread.run(HandlerThread.java:67) 

我的Java代码:

public class MainActivity extends AppCompatActivity {
    final static String RTSP_URL = "rtsp://192.168.1.102:8080/h264_pcm.sdp";
    PlayerView playerView;
    SimpleExoPlayer player;
    Uri URI = Uri.parse(RTSP_URL);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            playerView = (PlayerView) findViewById(R.id.player_view);
            player = new SimpleExoPlayer.Builder(this).build();
            MediaSource mediaSource =
                    new RtspMediaSource.Factory()
                            .createMediaSource(MediaItem.fromUri(URI));

            playerView.setPlayer(player);
            player.setMediaSource(mediaSource);
            player.prepare();
            player.play();
    }
}

我想,我会尝试使用它,libVlc因为在 Android VLC 应用程序上它可以工作,但我不知道它是如何工作的,如果你能指导我,我将非常感激 xD 或告诉我哪里出了问题Exoplayer

谢谢你。

标签: javaandroidvideo-streamingrtspexoplayer

解决方案


推荐阅读