java - 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
。
谢谢你。
解决方案
推荐阅读
- javascript - Netbeans - 预期:但发现如果(link.style.animation)
- java - 递归查找链表Java中的“最大”字符
- python - 在 django rest 框架中返回一个生成的 HTML 文件
- c - C - 如何添加多个标志
- c# - C# 优化 xml 到多级节点类型上的字典
- python - 我怎样才能用零正确填充一个 numpy 数组?
- php - 在 php 项目中,ajax 中的引导程序不起作用
- c++ - 在 createddialog 创建的窗口中捕获 OnMouseMove 消息以进行编辑控件?
- ios - 在 Swift 中,如何重用 UIVIewController 中的属性
- c - C函数在列表中插入项目