pili-engineering / PLMediaStreamingKit

PLMediaStreamingKit 是七牛推出的一款适用于 iOS 平台的推流 SDK,支持 RTMP 推流,h.264 和 AAC 编码,硬编、软编支持。具有丰富的数据和状态回调,方便用户根据自己的业务定制化开发。具有直播场景下的重要功能,如:美颜、背景音乐、水印等功能。

Home Page:https://github.com/pili-engineering/PLMediaStreamingKit

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

推流地址设置

opened this issue · comments

服务端新的 SDK 获取的推流地址是一个 URL 字符串,而不是 JSON 字符串,请问客户端怎么初始化 PLStream?

在 feedback 回调里会直接 crash,打印的状态是成功开始推流了。


  PLVideoCaptureConfiguration *videoCaptureConfiguration = [PLVideoCaptureConfiguration defaultConfiguration];
    PLAudioCaptureConfiguration *audioCaptureConfiguration = [PLAudioCaptureConfiguration defaultConfiguration];
    PLVideoStreamingConfiguration *videoStreamingConfiguration = [PLVideoStreamingConfiguration defaultConfiguration];
    PLAudioStreamingConfiguration *audioStreamingConfiguration = [PLAudioStreamingConfiguration defaultConfiguration];
    PLStream *stream = [[PLStream alloc]init];
    self.session = [[PLCameraStreamingSession alloc]initWithVideoCaptureConfiguration:videoCaptureConfiguration audioCaptureConfiguration:audioCaptureConfiguration videoStreamingConfiguration:videoStreamingConfiguration audioStreamingConfiguration:audioStreamingConfiguration stream:stream];
    [self.session startWithPushURL:[NSURL URLWithString:self.live.publishUrl] feedback:^(PLStreamStartStateFeedback feedback) {

    }];

初始化 PLCameraStreamingSession 的时候 stream 传入 nil 即可。

传入 nil 还是会crash


* thread #23: tid = 0x199339, 0x00000001802027d4 libc++abi.dylib`__cxa_throw, name = 'AURemoteIO::IOThread', stop reason = breakpoint 1.1
    frame #0: 0x00000001802027d4 libc++abi.dylib`__cxa_throw
    frame #1: 0x000000019277af38 AudioCodecs`ACBaseCodec::GetPropertyInfo(unsigned int, unsigned int&, unsigned char&) + 632
    frame #2: 0x000000019280cffc AudioCodecs`GetPropertyInfo(void*, unsigned int, unsigned int*, unsigned char*) + 44
    frame #3: 0x00000001833dd278 AudioToolbox`CodecConverter::CheckInitialize(void const*, unsigned int) + 388
    frame #4: 0x000000018338f2d4 AudioToolbox`CodecConverter::CodecConverter(OpaqueAudioComponent*&, OpaqueAudioComponentInstance*, StreamDescPair const&, StreamDescPair const&, bool, AudioConverterPrimeInfo const&) + 404
    frame #5: 0x000000018338e958 AudioToolbox`CodecEncoderFactory::BuildCodecConverterChain(StreamDescPair const&, ChainBuildSettings const&, AudioConverterChain*, PCMConverterFactory*) + 992
    frame #6: 0x00000001833c6e5c AudioToolbox`ConverterRegistry::CreateConverter(StreamDescPair const&, AudioConverterChain**, unsigned int, AudioClassDescription const*) + 168
    frame #7: 0x0000000183374070 AudioToolbox`_AudioConverterNewInternal + 312
  * frame #8: 0x0000000100428944 dongbaTV`-[PLAACEncoder setupAudioConverter](self=0x000000013db80240, _cmd="setupAudioConverter") + 528 at PLAACEncoder.m:317
    frame #9: 0x000000010042915c dongbaTV`-[PLAACEncoder reloadSourceASDB:](self=0x000000013db80240, _cmd="reloadSourceASDB:", sourceASBD=0x000000013da45a80) + 468 at PLAACEncoder.m:380
    frame #10: 0x000000010044840c dongbaTV`-[PLStreamingSession pushAudioBuffer:asbd:completion:](self=0x000000013db898f0, _cmd="pushAudioBuffer:asbd:completion:", audioBuffer=0x000000016ea36608, asbd=0x000000013da45a80, handler=(null)) + 364 at PLStreamingSession.m:1088
    frame #11: 0x0000000100448294 dongbaTV`-[PLStreamingSession pushAudioBuffer:asbd:](self=0x000000013db898f0, _cmd="pushAudioBuffer:asbd:", buffer=0x000000016ea36608, asbd=0x000000013da45a80) + 64 at PLStreamingSession.m:1070
    frame #12: 0x0000000100432ce8 dongbaTV`-[PLCameraStreamingSession microphoneSource:didGetAudioBuffer:](self=0x000000013da4b300, _cmd="microphoneSource:didGetAudioBuffer:", source=0x000000013db7a330, buffer=0x000000016ea36608) + 416 at PLCameraStreamingSession.m:790
    frame #13: 0x0000000100481510 dongbaTV`-[PLAudioSamplePusher publishData:](self=0x000000013db7bd20, _cmd="publishData:", publishedData=0x000000013db7bd38) + 568 at PLMicrophoneSource.m:625
    frame #14: 0x0000000100481628 dongbaTV`-[PLAudioSamplePusher pushData:withTimeStamp:](self=0x000000013db7bd20, _cmd="pushData:withTimeStamp:", ioData=0x000000013db87920, inTimeStamp=0x000000016ea36c08) + 216 at PLMicrophoneSource.m:637
    frame #15: 0x0000000100480830 dongbaTV`__54-[PLMicrophoneSource audioEffectFilterToPushStreaming]_block_invoke(.block_descriptor=<unavailable>, inRefCon=0x000000013db88880, ioActionFlags=0x000000016ea3698c, inTimeStamp=0x000000016ea36c08, inBusNumber=0, inNumberFrames=1024, ioData=0x000000013db87920) + 308 at PLMicrophoneSource.m:560
    frame #16: 0x0000000100401aa8 dongbaTV`AudioChannelFilterCallback(inRefCon=0x000000013db88880, ioActionFlags=0x000000016ea3698c, inTimeStamp=0x000000016ea36c08, inBusNumber=0, inNumberFrames=1024, ioData=0x000000013db87920) + 156 at PLAudioEffectCustomConfiguration.m:25
    frame #17: 0x00000001003fe160 dongbaTV`AudioHandler(inRefCon=0x000000013da7c3b0, ioActionFlags=0x000000016ea3698c, inTimeStamp=0x000000016ea36c08, inBusNumber=0, inNumberFrames=1024, ioData=0x000000013db87920) + 400 at PLAudioChannel.m:32
    frame #18: 0x00000001834a0c04 AudioToolbox`AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 556
    frame #19: 0x00000001834ca038 AudioToolbox`AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 44
    frame #20: 0x0000000183497d70 AudioToolbox`AUConverterBase::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 480
    frame #21: 0x00000001834a242c AudioToolbox`AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 216
    frame #22: 0x00000001834a0c34 AudioToolbox`AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 604
    frame #23: 0x0000000183486db8 AudioToolbox`AURemoteIO::PerformIO(unsigned int, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const*, AudioBufferList*, int&) + 488
    frame #24: 0x0000000183487d48 AudioToolbox`AURIOCallbackReceiver_PerformIO + 560
    frame #25: 0x000000018347e22c AudioToolbox`_XPerformIO + 104
    frame #26: 0x00000001833ab924 AudioToolbox`mshMIGPerform + 248
    frame #27: 0x0000000183451c30 AudioToolbox`MSHMIGDispatchMessage + 36
    frame #28: 0x00000001834870fc AudioToolbox`AURemoteIO::IOThread::Run() + 136
    frame #29: 0x000000018348a914 AudioToolbox`AURemoteIO::IOThread::Entry(void*) + 12
    frame #30: 0x0000000183396d70 AudioToolbox`CAPThread::Entry(CAPThread*) + 124
    frame #31: 0x000000018080fb28 libsystem_pthread.dylib`_pthread_body + 156
    frame #32: 0x000000018080fa8c libsystem_pthread.dylib`_pthread_start + 156
    frame #33: 0x000000018080d028 libsystem_pthread.dylib`thread_start + 4

找到原因了,打了异常断点会自动断在这里,去掉就可以了