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

[技术咨询] 海康SDK获取流后给流媒体播放花屏 #3463

Closed
TonyWang8904 opened this issue Apr 10, 2024 · 5 comments
Closed

[技术咨询] 海康SDK获取流后给流媒体播放花屏 #3463

TonyWang8904 opened this issue Apr 10, 2024 · 5 comments

Comments

@TonyWang8904
Copy link

咨询的功能模块

  • 创建直播流

咨询的具体内容和问题
项目使用是首页推荐的Java版sdk,j_zlm_sdk
因为某些原因,无法直接使用海康rtsp地址进行拉流代理,必须使用SDK获取直播流播放,使用FRealDataCallBack回调函数获取视频流数据后使用mk_media_input_frame函数添加帧,但是播放的画面花屏
回调处理函数

`

public void invoke(int lRealHandle, int dwDataType, Pointer pBuffer, int dwBufSize, Pointer pUser) {
        switch (dwDataType) {
            case HCNetSDK.NET_DVR_SYSHEAD: //系统头
                log.info("系统头");
                break;
            case HCNetSDK.NET_DVR_STREAMDATA:   //视频流数据(包括复合流和音视频分开的视频流数据)
                log.info("码流数据");
                MK_FRAME mkFrame = ZLM_API.mk_frame_create(0, 0, 0, pBuffer, dwBufSize, null, null);
                ZLM_API.mk_media_input_frame(mkMedia, mkFrame);
                break;
        }
    }

`

创建MediaSource函数

`

    mkMedia = ZLM_API.mk_media_create("__defaultVhost__", "live", "test", 0, 1, 1);
    CodecArgs args = new CodecArgs();
    CodecArgs.Video argsVideo = new CodecArgs.Video();
    argsVideo.width = 1920;
    argsVideo.height = 1080;
    argsVideo.fps = 25;
    args.video = argsVideo;
    MK_TRACK mkTrack = ZLM_API.mk_track_create(0, args);
    ZLM_API.mk_media_init_track(mkMedia, mkTrack);
    ZLM_API.mk_media_init_complete(mkMedia);

`

使用http://localhost:7080/nik/12.live.flv地址播放后画面花屏
微信截图_20240410191401

请教一下是怎么回事

@xiangshengjye
Copy link
Contributor

去看下海康的NET_DVR_SetESRealPlayCallBack接口

@TonyWang8904
Copy link
Author

去看下海康的NET_DVR_SetESRealPlayCallBack接口

使用海康的NET_DVR_SetESRealPlayCallBack接口

hcNetSDK.NET_DVR_SetESRealPlayCallBack(lPreviewHandle , mfPlayESCallBack, null);

在回调函数中打印信息

static class MFPlayESCallBack implements HCNetSDK.FPlayESCallBack {  
      public void invoke(int lPlayHandle, HCNetSDK.NET_DVR_PACKET_INFO_EX struPackInfo, Pointer pUser) {  
          log.info("包类型:{}", struPackInfo.dwPacketType);  
      }  
  } 

得到结果

2024-04-12 18:16:24.171 [Thread-13] INFO  com.service.HCPlayService:114 - 包类型:0
2024-04-12 18:16:24.211 [Thread-14] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.212 [Thread-15] INFO  com.service.HCPlayService:114 - 包类型:0
2024-04-12 18:16:24.212 [Thread-16] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.217 [Thread-17] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.257 [Thread-18] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.286 [Thread-19] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.326 [Thread-20] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.366 [Thread-21] INFO  com.service.HCPlayService:114 - 包类型:70780800
2024-04-12 18:16:24.417 [Thread-22] INFO  com.service.HCPlayService:114 - 包类型:70780800

直接将回调函数中的流输出到MediaSource

MK_FRAME mkFrame = ZLM_API.mk_frame_create(0, 0, 0, struPackInfo.pPacketBuffer, struPackInfo.dwPacketSize, null, null);
 ZLM_API.mk_media_input_frame(mkMedia, mkFrame);

抛出异常

java.lang.Error: Invalid memory access
	at com.sun.jna.Native.invokePointer(Native Method)
	at com.sun.jna.Function.invokePointer(Function.java:497)
	at com.sun.jna.Function.invoke(Function.java:450)
	at com.sun.jna.Function.invoke(Function.java:361)
	at com.sun.jna.Library$Handler.invoke(Library.java:270)
	at com.sun.proxy.$Proxy72.mk_frame_create(Unknown Source)

无法进行流播放

@xia-chu
Copy link
Member

xia-chu commented Apr 19, 2024

NET_DVR_SetESRealPlayCallBack回调 可能就不是H264 你先保存264文件 看看能否播放

@TonyWang8904
Copy link
Author

NET_DVR_SetESRealPlayCallBack回调 可能就不是H264 你先保存264文件 看看能否播放

已解决,Java版SDK的接口文件存在问题,替换后再次使用NET_DVR_SetESRealPlayCallBack就好了
多谢

@TheBestRicardoMLu
Copy link

我也是存在和你一样的问题,你能把你使用的SDK接口文件发我一下吗?感谢

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

No branches or pull requests

4 participants