Genymobile / scrcpy

Display and control your Android device
Apache License 2.0
106.43k stars 10.31k forks source link

[server] ERROR: Encoding error: java.lang.IllegalStateException: null #4299

Open hofe0815 opened 10 months ago

hofe0815 commented 10 months ago

Environment

Describe the bug

scrcpy 2.1.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)      10000000474ca671            device  Raspberry_Pi_4
C:\Program Files (x86)\scrcpy\ALlVersions\scrcpy-win64-v2....file pushed, 0 skipped. 120.8 MB/s (56995 bytes in 0.000s)
[server] INFO: Device: [Raspberry] Raspberry Raspberry Pi 4 (Android 12)
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.IllegalStateException
        at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
        at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:3535)
        at com.genymobile.scrcpy.ScreenEncoder.encode(ScreenEncoder.java:184)
        at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:105)
        at com.genymobile.scrcpy.ScreenEncoder.lambda$start$0$com-genymobile-scrcpy-ScreenEncoder(ScreenEncoder.java:294)
        at com.genymobile.scrcpy.ScreenEncoder$$ExternalSyntheticLambda0.run(Unknown Source:4)
        at java.lang.Thread.run(Thread.java:920)
INFO: Renderer: direct3d
INFO: Texture: 480x800

image

scrcpy -m1024, scrcpy -m400, --encoder 'c2.android.avc.encoder' and --encoder 'OMX.google.h264.encoder' dont work,

rom1v commented 10 months ago

Does adb shell screenrecord /sdcard/file.mp4 work?

hofe0815 commented 10 months ago

No :-(. Encoder failed (err=-38)

hofe0815 commented 10 months ago

this works but realy laggy. now i test e a bit with the encoder. scrcpy --video-codec=h264 --video-encoder='OMX.google.h264.encoder'

scrcpy --list-encoders

[server] INFO: List of video encoders:
    --video-codec=h264 --video-encoder='c2.android.avc.encoder'
    --video-codec=h264 --video-encoder='OMX.google.h264.encoder'
[server] INFO: List of audio encoders:
    --audio-codec=opus --audio-encoder='c2.android.opus.encoder'
    --audio-codec=aac --audio-encoder='c2.android.aac.encoder'
    --audio-codec=aac --audio-encoder='OMX.google.aac.encoder'

this works but realy bad.

0xffrom commented 8 months ago

The same issue

crcpy v2.2 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  R5CT21T1DXH                     device  SM_G990B
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 2.7 MB/s (64363 bytes in 0.022s)
[server] INFO: Device: [samsung] samsung SM-G990B (Android 13)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6.0 NVIDIA 535.113.01
INFO: Trilinear filtering enabled
INFO: Texture: 1080x2336
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1920...
[server] INFO: Retrying...
[server] INFO: Retrying with -m1600...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1280...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1024...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m800...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
WARN: Device disconnected
[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.IllegalStateException
    at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
    at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:3573)
    at com.genymobile.scrcpy.SurfaceEncoder.encode(SurfaceEncoder.java:157)
    at com.genymobile.scrcpy.SurfaceEncoder.streamScreen(SurfaceEncoder.java:76)
    at com.genymobile.scrcpy.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-SurfaceEncoder(SurfaceEncoder.java:253)
    at com.genymobile.scrcpy.SurfaceEncoder$$ExternalSyntheticLambda0.run(Unknown Source:4)
    at java.lang.Thread.run(Thread.java:1012)
rkochar commented 7 months ago

When I do scrcpy -S it works. When I try to stream a video, immediately get the error below. scrcpy --video-codec=h264 --video-encoder='OMX.google.h264.encoder' works but very slowly (somebody already wrote that above).

> scrcpy --version
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.28.5 / 2.28.5
 - libavcodec: 60.3.100 / 60.3.100
 - libavformat: 60.3.100 / 60.3.100
 - libavutil: 58.2.100 / 58.2.100
 - libusb: - / 1.0.26
> scrcpy --list-encoders
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  20c0732a                        device  AC2001
/opt/homebrew/Cellar/scrcpy/2.3.1/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 268.1 MB/s (66007 bytes in 0.000s)
[server] INFO: Device: [OnePlus] OnePlus AC2001 (Android 11)
[server] INFO: List of video encoders:
    --video-codec=h264 --video-encoder='OMX.qcom.video.encoder.avc'
    --video-codec=h264 --video-encoder='c2.android.avc.encoder'
    --video-codec=h264 --video-encoder='OMX.google.h264.encoder'
    --video-codec=h265 --video-encoder='OMX.qcom.video.encoder.hevc'
    --video-codec=h265 --video-encoder='OMX.qcom.video.encoder.hevc.cq'
    --video-codec=h265 --video-encoder='c2.android.hevc.encoder'
[server] INFO: List of audio encoders:
    --audio-codec=opus --audio-encoder='c2.android.opus.encoder'
    --audio-codec=aac --audio-encoder='c2.android.aac.encoder'
    --audio-codec=aac --audio-encoder='OMX.google.aac.encoder'
    --audio-codec=flac --audio-encoder='c2.android.flac.encoder'
    --audio-codec=flac --audio-encoder='OMX.google.flac.encoder'
> scrcpy -S
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  20c0732a                        device  AC2001
/opt/homebrew/Cellar/scrcpy/2.3.1/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 255.3 MB/s (66007 bytes in 0.000s)
[server] INFO: Device: [OnePlus] OnePlus AC2001 (Android 11)
INFO: Renderer: metal
INFO: Texture: 2400x1080
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1920...
[server] INFO: Retrying...
[server] INFO: Device screen turned off
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1600...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m1280...
[server] INFO: Retrying...
[server] INFO: Retrying with -m1024...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
[server] INFO: Retrying with -m800...
[server] INFO: Retrying...
[server] ERROR: Encoding error: java.lang.IllegalStateException: null
WARN: Device disconnected
[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.IllegalStateException
    at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
    at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:3461)
    at com.genymobile.scrcpy.SurfaceEncoder.encode(SurfaceEncoder.java:157)
    at com.genymobile.scrcpy.SurfaceEncoder.streamScreen(SurfaceEncoder.java:76)
    at com.genymobile.scrcpy.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-SurfaceEncoder(SurfaceEncoder.java:253)
    at com.genymobile.scrcpy.SurfaceEncoder$$ExternalSyntheticLambda0.run(Unknown Source:4)
    at java.lang.Thread.run(Thread.java:923)
diyism commented 7 months ago

similar errors for scrcpy 2.3.1 + waydroid on pine64 armbian:

$ scrcpy -s 192.168.15.169:5556 --no-audio --list-encoders
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     --> (tcpip)  192.168.15.169:5556             device  Pine64+
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 98.1 MB/s (66007 bytes in 0.001s)
[server] INFO: Device: [Waydroid] waydroid MiPad1 (Android 11)
[server] INFO: List of video encoders:
    --video-codec=h264 --video-encoder='OMX.google.h264.encoder'
[server] INFO: List of audio encoders:
    --audio-codec=aac --audio-encoder='OMX.google.aac.encoder'
    --audio-codec=flac --audio-encoder='OMX.google.flac.encoder'

$ scrcpy -s 192.168.15.169:5556 --no-audio
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     --> (tcpip)  192.168.15.169:5556             device  Pine64+
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 97.0 MB/s (66007 bytes in 0.001s)
[server] INFO: Device: [Waydroid] waydroid MiPad1 (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 22.3.6
INFO: Trilinear filtering enabled
[server] ERROR: Encoding error: java.lang.IllegalArgumentException: null
WARN: Device disconnected
[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.IllegalArgumentException
    at android.media.MediaCodec.createInputSurface(Native Method)
    at com.genymobile.scrcpy.SurfaceEncoder.streamScreen(SurfaceEncoder.java:70)
    at com.genymobile.scrcpy.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-SurfaceEncoder(SurfaceEncoder.java:253)
    at com.genymobile.scrcpy.SurfaceEncoder$$ExternalSyntheticLambda0.run(Unknown Source:4)
    at java.lang.Thread.run(Thread.java:923)
tefod-zz commented 4 months ago

When I do scrcpy -S it works. When I try to stream a video, immediately get the error below. scrcpy --video-codec=h264 --video-encoder='OMX.google.h264.encoder' works but very slowly (somebody already wrote that above).

Thanks - ur hint did the trick. For the record, i am using following command line to get a fast ScrCpy Display, for setting up an Android Stick remotely --max-size=1080 --max-fps=5 --render-driver=opengl --video-bit-rate=10M --legacy-paste --video-codec=h264 --video-encoder='OMX.google.h264.encoder'

rkochar commented 4 months ago

When I do scrcpy -S it works. When I try to stream a video, immediately get the error below. scrcpy --video-codec=h264 --video-encoder='OMX.google.h264.encoder' works but very slowly (somebody already wrote that above).

Thanks - ur hint did the trick. For the record, i am using following command line to get a fast ScrCpy Display, for setting up an Android Stick remotely --max-size=1080 --max-fps=5 --render-driver=opengl --video-bit-rate=10M --legacy-paste --video-codec=h264 --video-encoder='OMX.google.h264.encoder'

This is better in that scrcpy does not crash but freezes. Changing the app (from playing video to something not playing a video) from the phone (OnePlus Nord) unfreezes everything.