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

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.” #49

Open
wobushiafa opened this issue Feb 6, 2023 · 1 comment

Comments

@wobushiafa
Copy link

异常信息:
由于线程退出或应用程序请求,已中止 I/O 操作。
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at SIPSorceryMedia.FFmpeg.FFmpegVideoEncoder.DecodeFaster(FFmpeg.AutoGen.AVCodecID, FFmpeg.AutoGen.AVPacket*, Int32 ByRef, Int32 ByRef)
at SIPSorceryMedia.FFmpeg.FFmpegVideoEncoder.DecodeFaster(FFmpeg.AutoGen.AVCodecID, Byte[], Int32 ByRef, Int32 ByRef)
at SIPSorceryMedia.FFmpeg.FFmpegVideoEndPoint.GotVideoFrame(System.Net.IPEndPoint, UInt32, Byte[], SIPSorceryMedia.Abstractions.VideoFormat)
at SIPSorcery.Net.RTPSession.RaisedOnOnVideoFrameReceived(Int32, System.Net.IPEndPoint, UInt32, Byte[], SIPSorceryMedia.Abstractions.VideoFormat)
at SIPSorcery.net.RTP.VideoStream.ProcessVideoRtpFrame(System.Net.IPEndPoint, SIPSorcery.Net.RTPPacket, SIPSorcery.Net.SDPAudioVideoMediaFormat)
at SIPSorcery.net.RTP.MediaStream.OnReceiveRTPPacket(SIPSorcery.Net.RTPHeader, Int32, System.Net.IPEndPoint, Byte[], SIPSorcery.net.RTP.VideoStream)
at SIPSorcery.Net.RTPSession.OnReceiveRTPPacket(Int32, System.Net.IPEndPoint, Byte[])
at SIPSorcery.Net.RTPSession.OnReceive(Int32, System.Net.IPEndPoint, Byte[])
at SIPSorcery.Net.RTCPeerConnection.OnRTPDataReceived(Int32, System.Net.IPEndPoint, Byte[])
at SIPSorcery.Net.RtpIceChannel.OnRTPPacketReceived(SIPSorcery.Net.UdpReceiver, Int32, System.Net.IPEndPoint, Byte[])
at SIPSorcery.Net.UdpReceiver.CallOnPacketReceivedCallback(Int32, System.Net.IPEndPoint, Byte[])
at SIPSorcery.Net.UdpReceiver.EndReceiveFrom(System.IAsyncResult)
at System.Runtime.CompilerServices.TaskAwaiter+<>c.b__12_0(System.Action, System.Threading.Tasks.Task)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback, System.Object, System.Threading.Tasks.Task ByRef)
at System.Threading.Tasks.Task.RunContinuations(System.Object)
at System.Threading.Tasks.ValueTask1+ValueTaskSourceAsTask+<>c[[System.Net.Sockets.SocketReceiveFromResult, System.Net.Sockets, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].<.cctor>b__4_0(System.Object) at System.Net.Sockets.Socket+AwaitableSocketAsyncEventArgs.InvokeContinuation(System.Action1<System.Object>, System.Object, Boolean, Boolean)
at System.Net.Sockets.Socket+AwaitableSocketAsyncEventArgs.OnCompleted(System.Net.Sockets.SocketAsyncEventArgs)
at System.Net.Sockets.SocketAsyncEventArgs+<>c.<.cctor>b__176_0(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading.ThreadPoolTypedWorkItemQueue`2[[System.Threading.PortableThreadPool+IOCompletionPoller+Event, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Threading.PortableThreadPool+IOCompletionPoller+Callback, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].System.Threading.IThreadPoolWorkItem.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()

@maticcavalleri
Copy link

maticcavalleri commented Mar 17, 2023

I get the same error when calling VideoSource.StartVideo(). My code replicates this example from SipSorcery: https://github.com/sipsorcery-org/SIPSorceryMedia.FFmpeg/blob/master/test/FFmpegFileAndDevicesTest/Program.cs

Tried it with having VideoSource file at different locations on my local computer but all give the same System.AccessViolationException: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

EDIT: was able to fix this issue by also including:

AudioSource.OnAudioSourceEncodedSample += AudioSource_OnAudioSourceEncodedSample;
RTCPeer.OnAudioFormatsNegotiated += (audioFormats) =>
{
    AudioSource.SetAudioSourceFormat(audioFormats.First());
};

This was necessary even without calling AudioSource.StartAudio()

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

2 participants