Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

播放RTSP直播提示400 #2112

Closed
github2136 opened this issue Jul 2, 2019 · 12 comments
Closed

播放RTSP直播提示400 #2112

github2136 opened this issue Jul 2, 2019 · 12 comments

Comments

@github2136
Copy link

问题描述:

无法播放RTSP直播

问题机型/系统:

小米MIX2 Android8.0

GSY依赖版本

implementation('com.shuyu:gsyVideoPlayer-java:6.0.3') {
exclude group: 'com.android.support'
}
//是否需要ExoPlayer模式
implementation('com.shuyu:GSYVideoPlayer-exo2:6.0.3') {
exclude group: 'com.android.support'
}
//更多ijk的编码支持
implementation('com.shuyu:gsyVideoPlayer-ex_so:6.0.3') {
exclude group: 'com.android.support'
}

Demo中的复现步骤

直接播放视频logcat提示
IJKMEDIA: rtsp://111.43.138.180:9410/dss/monitor/params?cameraid=1000004%240&substream=2: Server returned 400 Bad Request
tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)

问题代码:(如果有)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    textureView.setUp("rtsp://111.43.138.180:9410/dss/monitor/params?cameraid=1000004%240&substream=2", true, "测试视频")
    val list = ArrayList<VideoOptionModel>()
    var videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp")
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp")
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "allowed_media_types", "video") //根据媒体类型来配置
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 20000)
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1316)
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 1)  // 无限读
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 100)
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10240)
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1)
    list.add(videoOptionModel)
    //  关闭播放器缓冲,这个必须关闭,否则会出现播放一段时间后,一直卡主,控制台打印 FFP_MSG_BUFFERING_START
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0)
    list.add(videoOptionModel)
    videoOptionModel = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1)
    list.add(videoOptionModel)
    GSYVideoManager.instance().setOptionModelList(list)
    //增加title
    textureView.getTitleTextView().setVisibility(View.VISIBLE)
    //设置返回键
    textureView.getBackButton().setVisibility(View.VISIBLE)
    //设置旋转
    val orientationUtils = OrientationUtils(this, textureView)
    //设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
    textureView.getFullscreenButton().setOnClickListener(View.OnClickListener { orientationUtils.resolveByClick() })
    //是否可以滑动调整
    textureView.setIsTouchWiget(true)
    //设置返回按键功能
    textureView.getBackButton().setOnClickListener(View.OnClickListener { onBackPressed() })
    textureView.startPlayLogic()
}

问题log(如果有)

07-02 15:39:04.511 17012-17045/com.jxgis.vlcdemo E/IJKMEDIA: rtsp://111.43.138.180:9410/dss/monitor/params?cameraid=1000004%240&substream=2: Server returned 400 Bad Request
07-02 15:39:04.519 17012-17012/com.jxgis.vlcdemo E/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)

@CarGuo
Copy link
Owner

CarGuo commented Jul 2, 2019

重定向了

I/IJKMEDIA: Status 302: Redirecting to rtsp://111.43.138.180:9110/dss/monitor/param/cameraid=1000004%240%26substream=2?token=913&trackID=
2019-07-02 16:11:06.055 11989-12074/com.example.gsyvideoplayer I/IJKMEDIA: Hit DNS cache hostname = 111.43.138.180
2019-07-02 16:11:06.710 11989-12074/com.example.gsyvideoplayer E/IJKMEDIA: rtsp://111.43.138.180:9410/dss/monitor/params?cameraid=1000004%240&substream=2: Server returned 400 Bad Request

@github2136
Copy link
Author

重定向了

I/IJKMEDIA: Status 302: Redirecting to rtsp://111.43.138.180:9110/dss/monitor/param/cameraid=1000004%240%26substream=2?token=913&trackID=
2019-07-02 16:11:06.055 11989-12074/com.example.gsyvideoplayer I/IJKMEDIA: Hit DNS cache hostname = 111.43.138.180
2019-07-02 16:11:06.710 11989-12074/com.example.gsyvideoplayer E/IJKMEDIA: rtsp://111.43.138.180:9410/dss/monitor/params?cameraid=1000004%240&substream=2: Server returned 400 Bad Request

地址重定向还要额外设置什么么?我看问题汇总里面说400错误加 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1)这个加上了我这边也是播不了

@CarGuo
Copy link
Owner

CarGuo commented Jul 2, 2019

没办法,重定向后 dns_cache_clear 失效了,目前 rtsp 的重定向是不支持

@CarGuo CarGuo closed this as completed Jul 5, 2019
@CarGuo
Copy link
Owner

CarGuo commented Jul 11, 2019

使用附件 so 可修复这个问题

        VideoOptionModel videoOptionModel =
                new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
        List<VideoOptionModel> list = new ArrayList<>();
        list.add(videoOptionModel);
        VideoOptionModel videoOptionModel2 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);
        list.add(videoOptionModel2);
        VideoOptionModel videoOptionModel3 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
        list.add(videoOptionModel3);
        GSYVideoManager.instance().setOptionModelList(list);

libs.rar.zip

@noobzhp
Copy link

noobzhp commented Sep 8, 2019

使用附件 so 可修复这个问题

        VideoOptionModel videoOptionModel =
                new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
        List<VideoOptionModel> list = new ArrayList<>();
        list.add(videoOptionModel);
        VideoOptionModel videoOptionModel2 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);
        list.add(videoOptionModel2);
        VideoOptionModel videoOptionModel3 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
        list.add(videoOptionModel3);
        GSYVideoManager.instance().setOptionModelList(list);

libs.rar.zip

替换成了附件中的so库还是只能播放一个rtsp的视频源呢,两个视频源的ip是同一个网段,但是不同的ip

@suter515
Copy link

使用5.0.1 的库,使用最新的so 包(libs.rar.zip)是可以切换的,播放rtsp 还可以;
实测有效;
用2.1.3 的库,切换时,加一句:也可以:// GSYVideoManager.instance().prepare(sourceUrl,null,falsel);
使用5.0.1的库 ,切换时,加这一句,记得是没效果;
// GSYVideoManager.instance().prepare(sourceUrl,null,false,1,false,null);

@suter515
Copy link

我播放的流,ip 地址,都一样,只是端口号不一样,
使用5.0.1 的库,使用最新的so 包(libs.rar.zip)是可以切换的,播放rtsp 还可以;
实测有效;

@honganxue
Copy link

替换so 文件 是不是要把项目Clone 下来 引用 然后替换so

@CarGuo
Copy link
Owner

CarGuo commented Dec 27, 2019

@honganxue 不用,只要把 so 放到你项目里,仅依赖 java 对象就好了

@honganxue
Copy link

亲测可用,感谢楼主的细心解惑! @CarGuo

@LXLYHM
Copy link

LXLYHM commented Mar 31, 2020

亲测可用,太感谢楼主了

@lhhseraph
Copy link

使用附件 so 可修复这个问题

        VideoOptionModel videoOptionModel =
                new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
        List<VideoOptionModel> list = new ArrayList<>();
        list.add(videoOptionModel);
        VideoOptionModel videoOptionModel2 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);
        list.add(videoOptionModel2);
        VideoOptionModel videoOptionModel3 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
        list.add(videoOptionModel3);
        GSYVideoManager.instance().setOptionModelList(list);

libs.rar.zip

楼主你好,问使用6.0.3时播放重定向直播(重定向过)和点播时也出现切换后就播不了,返回10000,是否也可以更新这个so文件解决?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants
@lhhseraph @CarGuo @github2136 @suter515 @honganxue @LXLYHM @noobzhp and others