在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时候会奔溃,有的时候不崩溃;

在崩溃的时候

  1. xcode 上的详情显示
Domain: IDEDebugSessionErrorDomain
Code: 10
Failure Reason: Message from debugger: Terminated due to memory issue

大致意思是内存有问题

  1. SGPlog的log数据 到 vr**流加载完毕 后面很明显么有 videotoolbox_vld 的初始化

2022-03-09 14:35:28.050460+0800 PaiOSnoramicLive[40398:12015087] SGFFLog : Format videotoolbox_vld chosen by get_formaios15t().

2022-03-09 14:35:28.050516+0800 PanoramicLive[40398:12015087] SGFFLog : Format videotoolbox_vld requires hwaccel电脑怎么截图 initialisation.

**2022-03-09 14:32:50.774550+0800 PanoramicLive[40379:12013560] SGFFLog : format: start_time: 1386865.197 duration: -9223372036854.775 bitrate=0 kb/s**
**2022-03-09 14:32:50.778570+0800 PanoramicLive[40379:12013560] SGFFLog : After avformat_find_stream_info() pos: 2399171 bytes read:2399171 seeks:0 frames:120**
**2022-03-09 14:32:50.972442+0800 PanoramicLive[40379:12013407] Metal GPU Frame Capture Enabled**
**2022-03-09 14:32:50.973027+0800 PanoramicLive[40379:12013407] Metal API Validation Enabled**
**2022-03-09 14:32:51.068288+0800 PanoramicLive[40379:12013560] vr**流加载完毕
**2022-03-09 14:32:51.073546+0800 PanoramicLive[40379:12013786] SGFFLog : detected 6 logical cores**
**2022-03-09 14:32:51.073783+0800 PanoramicLive[40379:12013786] SGFFLog : nal_unit_type: 7(SPS), nal_ref_idc: 3**
**2022-03-09 14:32:51.073866+0800 PanoramicLive[40379:12013786] SGFFLog : nal_unit_type: 8(PPS), nal_ref_idc: 3**
**(lldb)**
  1. bugly 上的崩溃日志是这样的

在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时

SGAudioFrame frameWithDescriptor:numberOfSamples:] -[SGAudioDecoder clipFrames:timeRange:]+972

-[SGAudioDecoder processPacket:]+292电脑键盘

-[SGAudioDecoder decode:]+1460

-[SGDecodeContext decode:unlock:]+1796

-[SGDecodeLoop runningThread]+764

大致是SGAudioDecoder在进行解码的时候 从Packet中获取Frame的时候异常;我们可以看到一个很重要的参数numberOfSamples ,采样率,这数据是怎么来的呢?

  1. xcode 异常奔溃断点截图

在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时

在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时

再看一下上一步崩溃的地方,可以看出numberO电脑怎么截图fSamples 就是通过这个方法 得到的

**int** nb_samples = (**int**)CMTimeConvertScale(duration, ad.sampleRate, kCMTimeRoundingMethod_RoundTowardZero).value;

CMTimeConvertScale 这个方法是: 使用指定的舍入方法将源时间转换为新的xcode文件中文注释乱码问题时间刻度。

func CMTimeConvertScale(_ time: CMTime , timescale newTimescale: Int32, method: CMTimeRoundingMethod   -> CMTime

这个地方电脑怎么录屏转换后,返回的是int,这个地方有没有可能是内存溢出了呢,于是 我用long long int 去接收,然后打印数据,发现,有的时候的 long long int 和 int 返回的数据不同, 于是我查看了int 的范围,

32bit下:
unsigned int 0~4294967295  
int -2147483648~2147483647 
unsigned long 和int一样
long 和int一样
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
64bit下
unsigned int 0~4294967295  
int -2147483648~2147483647 
unsigned long 和 unsigned long long一样
long 和long long一样
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

解决办ios系统

到这ios鲁多多app里,我们已经可以确定是数据的溢ffmpeg耻辱柱事件出导致崩溃了;我们有两套解ffmpeg是什么软件决方案:

    1. 把后面 所ffmpeg耻辱柱事件有的int换成 long long int ,但是,后面底层的FFmpeffmpeg.dll丢失怎么办g 方法都是int ,目前工程师使用ffmpeg的.o文件 ,所以这个方法行不通

在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时

    1. 这里面只是有些数据是异常的,那把这些数据过滤掉也就可以了

所以我这边也是选择这个方法,在 clipFrames方法 CMTimeConvertScale进行转换前,过滤掉异常的数据,应该还有别的更好方法,大家可以补充哦

 long long int  nb_samplesLong = ( long long int)CMTimeConvertScale(duration, ad.sampleRate, kCMTimeRoundingMethod_RoundTowardZero).value;
     if(nb_samplesLong >=2147483647) {
       break;
      }

在使用SGPlayer 播放全景直播流的时候,在电脑端mac通过 VLC播放器或者MKPlayer,都可以正常播放视频源,但是在iOS手机上,视频加载后,有的时

完结!