ffmpeg合法的解码错误

我的问题如下,我发送一个H.264编码的视频通过WebRock WebRTC的帮助下捕获。 这个想法是执行服务器端分析和对象跟踪。

navigator.mediaDevices.getUserMedia(constraint).then((stream) => { isVideoElement(target, stream) mediaRecorder = recorder(stream, {mimeType: 'video/webm; codecs=H264'}) mediaRecorder.ondataavailable = (blob) => socket.send(blob.data) mediaRecorder.start('2000'); }) 

在服务器端,数据作为ByteBuffer被接收:

 override fun handleBinaryMessage(session: WebSocketSession, msg: BinaryMessage) { analysis(msg.payload) } 

我使用以下资源( resource_1 , resource_2 )来尝试将我的ByteBuffer转换为OpenCv框架:

 fun startPreview(data: ByteBuffer) { avcodec_register_all() val pack = avcodec.AVPacket() pack.data(BytePointer(data)) avcodec.av_init_packet(pack) val videoData = BytePointer(data) val codec = avcodec.avcodec_find_decoder(avcodec.AV_CODEC_ID_H264) val videoCodecContext = avcodec.avcodec_alloc_context3(codec) videoCodecContext.width(1280) videoCodecContext.height(720) videoCodecContext.pix_fmt(avutil.AV_PIX_FMT_YUV420P) videoCodecContext.codec_type(avutil.AVMEDIA_TYPE_VIDEO) videoCodecContext.extradata(videoData) videoCodecContext.extradata_size(data.capacity()) videoCodecContext.flags2(videoCodecContext.flags2() or avcodec.CODEC_FLAG2_CHUNKS) avcodec.avcodec_open2(videoCodecContext, codec, null as PointerPointer<*>?) val decodedFrameLength = avcodec.avcodec_receive_frame(videoCodecContext, avutil.AVFrame()) println(decodedFrameLength) } 

我接着收到-35的codedFrameLength指示解码错误,不知道如何从这里开始?

Interesting Posts