Tryanks / go-rkcodec

A broken bindings for rkmpp (Video Decoder / Video Encoder) in Go
MIT License
3 stars 1 forks source link

为什么一直初始化不了解码器? #2

Open DarkiT opened 1 month ago

DarkiT commented 1 month ago

为什么一直初始化不了解码器,请问您是使用的哪个版本的mpp?

panic: MPP_ERR_NULL_PTR

goroutine 1 [running]:
main.main()

main.main()
    /opt/www/infer/abc/abc.go:13 +0x174
Tryanks commented 1 month ago

This library has not been developed for over two months (I'm sorry :( ), and as far as I know (important), mpp may have had a significant number of updates during this time. Please provide the minimal reproducible code you used, and I will investigate the issue as soon as possible.

DarkiT commented 1 month ago

Below is the process I followed to compile MPP

mkdir -p /opt/mpp && cd /opt/mpp
git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
pushd rkmpp
mkdir rkmpp_build
pushd rkmpp_build
cmake \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_TEST=OFF \
    ..
make -j $(nproc)
make install

The test code is exactly the code used in your example.

Tryanks commented 1 month ago

Hi, I'm try to fixed in 92b57a3e430c1d026cd61505ca6522a12b0e048b and c0d8aec6c0a4662a2b7434816cc55eaaeed25288, It could run through in my board. go get -u github.com/Tryanks/go-rkcodec@v0.0.3

Let me know if you have any issue else.

DarkiT commented 1 month ago

Hi, I've modified your code: hdr_meta_com.go

//HdrCodecBut = HdrCodecType(C.HDR_CODEC_BUT)

//func (f *MppFrame) FillHdrMeta(t HdrCodecType) {
//  C.fill_hdr_meta_to_frame(*f.c, C.HdrCodecType(t))
//}

He can now run on my RK3566, but I'm a newbie and don't know how to retrieve the decoded images. Could you provide me with a demo? Using fmt.Println(frame.GetWidth(), frame.GetHeight()) to get the width and height of the image causes a crash.

for {
    select {
    case <-noVideoTimeout.C:
        return fmt.Errorf("[%s] stream exit while no keyframe\n", id)
    case pck := <-ch:
        if pck.IsKeyFrame {
            noVideoTimeout.Reset(60 * time.Second)
            start = true
        }
        if !start {
            continue
        }
        pak.SetData(pck.Data)
        err = decoder.DecodePutPacket(*pak)
        if err != rkcodec.MppSuccess {
            log.Error("发送帧数据给解码器失败: %v", err)
        }
        err = decoder.DecodeGetFrame(frame)
        if err == rkcodec.MppSuccess {
            fmt.Println(frame.GetWidth(), frame.GetHeight())
            log.Info("发送第%d个数据包", i)
        } else {
            log.Error("从解码器获取数据失败: %v", err)
        }
    }
    i++
}
SIGSEGV: segmentation violation
PC=0x7fa93de1d0 m=3 sigcode=1 addr=0x8
signal arrived during cgo execution

goroutine 21 gp=0x4000082e00 m=3 mp=0x4000053008 [syscall]:
runtime.cgocall(0x79fc60, 0x4000061d28)
    /usr/local/go/src/runtime/cgocall.go:157 +0x44 fp=0x4000061cf0 sp=0x4000061cb0 pc=0x40b6c4
chipeak-live/pkg/rkcodec._Cfunc_mpp_frame_get_width(0x0)
    _cgo_gotypes.go:1395 +0x34 fp=0x4000061d20 sp=0x4000061cf0 pc=0x78ec34
main.(*Rtsp2Web).Rtsp2Image.(*MppFrame).GetWidth.func4(0x40000a20a8?)
    /opt/www/infer/pkg/rkcodec/frame.go:388 +0x44 fp=0x4000061d60 sp=0x4000061d20 pc=0x79da74
chipeak-live/pkg/rkcodec.(*MppFrame).GetWidth(...)
    /opt/www/infer/pkg/rkcodec/frame.go:388
main.(*Rtsp2Web).Rtsp2Image(0x40000ca2e0, {0x40000b82a0, 0x24}, 0x4000098180)
    /opt/www/infer/demo/video.go:291 +0x4fc fp=0x4000061f50 sp=0x4000061d60 pc=0x79d8bc
main.main.func1()
    /opt/www/infer/demo/main.go:43 +0xb4 fp=0x4000061fd0 sp=0x4000061f50 pc=0x799e14
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x4000061fd0 sp=0x4000061fd0 pc=0x475724
created by main.main in goroutine 1
    /opt/www/infer/demo/main.go:41 +0x108

goroutine 1 gp=0x40000021c0 m=nil [runnable]:
runtime.selectnbrecv(0x4000033f28?, 0x4000098180?)
    /usr/local/go/src/runtime/chan.go:713 +0x48 fp=0x4000033ed0 sp=0x4000033ed0 pc=0x40e0f8
main.main()
    /opt/www/infer/demo/main.go:50 +0x118 fp=0x4000033f40 sp=0x4000033ed0 pc=0x799d38
runtime.main()
    /usr/local/go/src/runtime/proc.go:271 +0x28c fp=0x4000033fd0 sp=0x4000033f40 pc=0x441adc
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x4000033fd0 sp=0x4000033fd0 pc=0x475724

goroutine 2 gp=0x4000002c40 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x400004cf90 sp=0x400004cf70 pc=0x441f08
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:408
runtime.forcegchelper()
    /usr/local/go/src/runtime/proc.go:326 +0xb8 fp=0x400004cfd0 sp=0x400004cf90 pc=0x441d98
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x400004cfd0 sp=0x400004cfd0 pc=0x475724
created by runtime.init.6 in goroutine 1
    /usr/local/go/src/runtime/proc.go:314 +0x24

goroutine 18 gp=0x4000082380 m=nil [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x4000048760 sp=0x4000048740 pc=0x441f08
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:408
runtime.bgsweep(0x400008e000)
    /usr/local/go/src/runtime/mgcsweep.go:278 +0xa0 fp=0x40000487b0 sp=0x4000048760 pc=0x42d620
runtime.gcenable.gowrap1()
    /usr/local/go/src/runtime/mgc.go:203 +0x28 fp=0x40000487d0 sp=0x40000487b0 pc=0x421858
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x40000487d0 sp=0x40000487d0 pc=0x475724
created by runtime.gcenable in goroutine 1
    /usr/local/go/src/runtime/mgc.go:203 +0x6c

goroutine 19 gp=0x4000082540 m=nil [GC scavenge wait]:
runtime.gopark(0x400008e000?, 0x9197f0?, 0x1?, 0x0?, 0x4000082540?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x4000048f60 sp=0x4000048f40 pc=0x441f08
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:408
runtime.(*scavengerState).park(0xc223c0)
    /usr/local/go/src/runtime/mgcscavenge.go:425 +0x5c fp=0x4000048f90 sp=0x4000048f60 pc=0x42b02c
runtime.bgscavenge(0x400008e000)
    /usr/local/go/src/runtime/mgcscavenge.go:653 +0x44 fp=0x4000048fb0 sp=0x4000048f90 pc=0x42b574
runtime.gcenable.gowrap2()
    /usr/local/go/src/runtime/mgc.go:204 +0x28 fp=0x4000048fd0 sp=0x4000048fb0 pc=0x4217f8
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x4000048fd0 sp=0x4000048fd0 pc=0x475724
created by runtime.gcenable in goroutine 1
    /usr/local/go/src/runtime/mgc.go:204 +0xac

goroutine 20 gp=0x4000082a80 m=nil [finalizer wait]:
runtime.gopark(0x400004c5b8?, 0x470f68?, 0x8?, 0x0?, 0x7d7160?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x400004c580 sp=0x400004c560 pc=0x441f08
runtime.runfinq()
    /usr/local/go/src/runtime/mfinal.go:194 +0x108 fp=0x400004c7d0 sp=0x400004c580 pc=0x420928
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x400004c7d0 sp=0x400004c7d0 pc=0x475724
created by runtime.createfing in goroutine 1
    /usr/local/go/src/runtime/mfinal.go:164 +0x80

goroutine 3 gp=0x4000003500 m=nil [select]:
runtime.gopark(0x40000dddd8?, 0x5?, 0x0?, 0x0?, 0x40000ddd5e?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x40000ddbe0 sp=0x40000ddbc0 pc=0x441f08
runtime.selectgo(0x40000dddd8, 0x40000ddd54, 0x24?, 0x0, 0xf4240?, 0x1)
    /usr/local/go/src/runtime/select.go:327 +0x608 fp=0x40000ddcf0 sp=0x40000ddbe0 pc=0x4548c8
main.(*Rtsp2Web).work(0x40000ca2e0, {0x40000b82a0, 0x24}, 0x400007c000)
    /opt/www/infer/demo/video.go:152 +0x1dc fp=0x40000dde90 sp=0x40000ddcf0 pc=0x79ca6c
main.(*Rtsp2Web).Start.func1({0x40000b82a0, 0x24}, 0x400007c000)
    /opt/www/infer/demo/video.go:188 +0x70 fp=0x40000ddfa0 sp=0x40000dde90 pc=0x79d110
main.(*Rtsp2Web).Start.gowrap2()
    /opt/www/infer/demo/video.go:201 +0x38 fp=0x40000ddfd0 sp=0x40000ddfa0 pc=0x79d068
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x40000ddfd0 sp=0x40000ddfd0 pc=0x475724
created by main.(*Rtsp2Web).Start in goroutine 21
    /opt/www/infer/demo/video.go:186 +0x264

goroutine 22 gp=0x4000082fc0 m=nil [IO wait]:
runtime.gopark(0x8?, 0x4000053008?, 0xb0?, 0x20?, 0x0?)
    /usr/local/go/src/runtime/proc.go:402 +0xc8 fp=0x400005ca00 sp=0x400005c9e0 pc=0x441f08
runtime.netpollblock(0x0?, 0xffffffff?, 0xff?)
    /usr/local/go/src/runtime/netpoll.go:573 +0x158 fp=0x400005ca40 sp=0x400005ca00 pc=0x43af68
internal/poll.runtime_pollWait(0x7f602c6f20, 0x72)
    /usr/local/go/src/runtime/netpoll.go:345 +0xa0 fp=0x400005ca70 sp=0x400005ca40 pc=0x46fec0
internal/poll.(*pollDesc).wait(0x40001ca000?, 0x4000208000?, 0x0)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x28 fp=0x400005caa0 sp=0x400005ca70 pc=0x4dd6c8
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0x40001ca000, {0x4000208000, 0x1000, 0x1000})
    /usr/local/go/src/internal/poll/fd_unix.go:164 +0x200 fp=0x400005cb40 sp=0x400005caa0 pc=0x4dea10
net.(*netFD).Read(0x40001ca000, {0x4000208000?, 0x7c4f80?, 0x4000082fc0?})
    /usr/local/go/src/net/fd_posix.go:55 +0x28 fp=0x400005cb90 sp=0x400005cb40 pc=0x66d448
net.(*conn).Read(0x4000206000, {0x4000208000?, 0xe9?, 0x30000?})
    /usr/local/go/src/net/net.go:179 +0x34 fp=0x400005cbe0 sp=0x400005cb90 pc=0x679694
net.(*TCPConn).Read(0xc18d2e049c51d364?, {0x4000208000?, 0xc22220?, 0x4ddb70?})
    <autogenerated>:1 +0x2c fp=0x400005cc10 sp=0x400005cbe0 pc=0x688dcc
bufio.(*Reader).Read(0x4000202060, {0x40000b0870, 0x4, 0x0?})
    /usr/local/go/src/bufio/bufio.go:241 +0x1b4 fp=0x400005cc50 sp=0x400005cc10 pc=0x507404
bufio.(*ReadWriter).Read(0x400005ccb8?, {0x40000b0870?, 0x134ad18b36cda?, 0x1c51f8fc?})
    <autogenerated>:1 +0x2c fp=0x400005cc80 sp=0x400005cc50 pc=0x50a4ec
io.ReadAtLeast({0x91e6a0, 0x400020c000}, {0x40000b0870, 0x4, 0x4}, 0x4)
    /usr/local/go/src/io/io.go:335 +0xa0 fp=0x400005ccd0 sp=0x400005cc80 pc=0x482060
io.ReadFull(...)
    /usr/local/go/src/io/io.go:354
github.com/deepch/vdk/format/rtspv2.(*RTSPClient).startStream(0x4000192000)
    /opt/www/pkg/mod/github.com/deepch/vdk@v0.0.27/format/rtspv2/client.go:280 +0x268 fp=0x400005cfb0 sp=0x400005ccd0 pc=0x7945c8
github.com/deepch/vdk/format/rtspv2.Dial.gowrap1()
    /opt/www/pkg/mod/github.com/deepch/vdk@v0.0.27/format/rtspv2/client.go:243 +0x28 fp=0x400005cfd0 sp=0x400005cfb0 pc=0x794228
runtime.goexit({})
    /usr/local/go/src/runtime/asm_arm64.s:1222 +0x4 fp=0x400005cfd0 sp=0x400005cfd0 pc=0x475724
created by github.com/deepch/vdk/format/rtspv2.Dial in goroutine 3
    /opt/www/pkg/mod/github.com/deepch/vdk@v0.0.27/format/rtspv2/client.go:243 +0x14c4

r0      0xffffffff
r1      0x0
r2      0x0
r3      0x7f540008e0
r4      0xc
r5      0x7f540011e0
r6      0x3dd0239cc82e3a34
r7      0x33313a3631203732
r8      0xce
r9      0x7fa9504b20
r10     0x0
r11     0x7fa9317440
r12     0x7fa9317720
r13     0x0
r14     0x0
r15     0x7f61b6c946
r16     0x7fa936b028
r17     0x7fa925dbd4
r18     0x5
r19     0x0
r20     0x4000061ce0
r21     0x4000062000
r22     0x1
r23     0x7fe1414eef
r24     0x0
r25     0x7f6135f000
r26     0x8a4d48
r27     0x10
r28     0x4000002fc0
r29     0x7f61b6d2e0
lr      0x7fa93de1d0
sp      0x7f61b6d2e0
pc      0x7fa93de1d0
fault   0x8
Tryanks commented 1 month ago

Hi,

Sorry for the delayed response. My board, the OrangePi5, accidentally had a short circuit between the 5V pin and the GND pin, and now it's on its way to the factory :( Once the board is back, I will supplement some samples and test data that can run on my device, which are all about ready. It's dead. I have to buy new one.

DarkiT commented 2 weeks ago

Hi,

Sorry for the delayed response. My board, the OrangePi5, accidentally had a short circuit between the 5V pin and the GND pin, and now it's on its way to the factory :( ~Once the board is back, I will supplement some samples and test data that can run on my device, which are all about ready.~ It's dead. I have to buy new one.

Glad to see you're continuing to maintain the code again; it looks like your new development board has returned.