N
O
D
E
M
E
D
I
A
Thinking
首页
产品
文档
博客
订单
文档
使用Objective-C开发直播推流应用
2026年 5月 20日 下午3:43
## 创建项目 ### 1.打开xcode,点击 Create New Project...  ### 2.选择iOS项目App类型,点击Next  ### 3.为应用程序命名并选择Storyboard,Objective-C,点击Next  ### 4.在弹出的窗口中选择项目创建目录 ## 集成SDK 本demo采用本地SDK压缩包进行适配,点击下载最新版SDK: ### 1.解压sdk到项目根目录  ### 2.在xcode项目中,添加framework  ### 3.在弹出的框中选择解压后的sdk目录,并点击Add Other... 选择Add Files...  ### 4.选中解压后的SDK目录  ### 5.添加后的项目目录结构  ## 代码集成 ### 1.在Stroyboard中添加视频控件,参数控件,开始按钮,并设置约束  ### 2.将视频控件, 参数控件,开始按钮绑定到ViewController,  ### 3.引入SDK头文件 ``` objc #import "NodeMediaClient/NodeMediaClient.h" ``` ### 4.定义推流器对象 ``` objc @interface ViewController () @property (strong, nonatomic) NodePublisher *np; ``` ### 5.初始化推流器对象 ``` objc @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _np = [[NodePublisher alloc] initWithLicense:@"your license string"]; ``` ### 6.绑定试图 ```objc [_np attachView:self.cameraView]; ``` ### 7.设置音频参数 ```objc [_np setAudioParamWithCodec:NMC_CODEC_ID_AAC profile:NMC_PROFILE_AUTO samplerate:[self.sampleRateField.text intValue] channels:[self.channelsField.text intValue] bitrate:[self.audioBitrateField.text intValue]]; ``` 可以选用的音频profile有 ```objc #define NMC_PROFILE_AAC_LC 1 #define NMC_PROFILE_AAC_HE 4 #define NMC_PROFILE_AAC_HE_V2 28 #define NMC_PROFILE_AAC_LD 22 #define NMC_PROFILE_AAC_ELD 38 ``` ### 8.设置视频参数 ```objc [_np setVideoOrientation:VIDEO_ORIENTATION_PORTRAIT]; [_np setKeyFrameInterval:3]; [_np setVideoParamWithCodec:NMC_CODEC_ID_H265 profile:NMC_PROFILE_AUTO width:[self.widthField.text intValue] height:[self.heightField.text intValue] fps:[self.fpsField.text intValue] bitrate:[self.videoBitrateField.text intValue]]; ``` 可以选用的视频profile有 ```objc #define NMC_PROFILE_H264_BASELINE 66 #define NMC_PROFILE_H264_MAIN 77 #define NMC_PROFILE_H264_HIGH 100 #define NMC_PROFILE_H265_MAIN 1 ``` ### 9.打开前置摄像头进行预览 ```objc [_np openCamera:YES]; ``` ### 10.配置摄像头麦克风权限  确保添加了摄像头和麦克风的权限  ### 11.为开始按钮设置推流 ```objc - (IBAction)startAction:(id)sender { [_np start:self.urlField.text]; } ``` 摄像头麦克风需要运行到真实机器,app运行后可以看到摄像头画面已经预览成功,点击开始推流按钮,流媒体服务器接收到直播推流。 ## 高级设置 ### 设置事件监听 推流器从开始播放到停止,中间会有诸如:开始连接,连接成功,连接失败,网络异常,网络超时,执行重连等一系列状态的改变。 这些事件不会通过一个start或者stop方法来返回。那么就需要设置一个状态监听的回调函数,当这些事件发生时做相应的操作。 #### 1.使当前ViewController 继承NodePublisherDelegate ```objc @interface ViewController () <NodePublisherDelegate> ``` #### 2.设置回调 ```objc - (void)viewDidLoad { [super viewDidLoad]; _np = [[NodePublisher alloc] initWithLicense:@"your license string"]; [_np setNodePublisherDelegate:self]; ``` #### 3.重载回调函数 ```objc - (void)onEventCallback:(id)sender event:(int)event msg:(NSString *)msg { // 事件将在这里回调 switch (event) { case 2000: //开始连接 break; case 2001: //推流连接成功 break; case 2002: //连接失败 break; case 2003: //开始重连 break; case 2004: //结束推流 break; case 2005: //网络异常 break; case 20006: //网络超时 break; } } ``` ### 开启硬件加速 ```objc [_np setHWAccelEnable:YES]; ``` ### 开启麦克风降噪 ```objc [_np setDenoiseEnable:YES]; ``` ### 已三摄模式打开摄像头,可同时在超广角,广角,长焦三个镜头下缩放镜头 ```objc [_np openCameraDevice:NMC_DEVICE_TYPE_TripleCamera withFront:NO]; ``` 可以使用的模式有: ```objc #define NMC_DEVICE_TYPE_WideAngleCamera 0 // 广角 #define NMC_DEVICE_TYPE_TelephotoCamera 1 // 长焦 #define NMC_DEVICE_TYPE_UltraWideCamera 2 // 超广角 #define NMC_DEVICE_TYPE_DualCamera 3 // 双摄 #define NMC_DEVICE_TYPE_TripleCamera 4 // 三摄 ``` ### 以中心点自动对焦,调光 ```objc [_np startFocusAndMeteringCenter]; ``` ### 添加额外输出,可以是直播流地址,也可以是全路径的文件,支持flv,mp4,ts,mkv格式 ``` [_np addOutput:@"file save path and name.mkv"]; ``` ### 移除全部额外输出 ```objc [_np removeOutputs]; ```
嘿,我是小R,需要帮助随时找我哦
QQ客服:281269007
邮件支持
扫码加微信
回到顶部