Skip to content

Commit a3c547e

Browse files
tonychanchenoldcodefarmer
authored andcommitted
添加通过播放器拉流,保存原始数据到Document目录
Change-Id: I16151cc7e22e439f3d56119603c47a7cf2c4ed8a
1 parent db710b5 commit a3c547e

File tree

5 files changed

+86
-25
lines changed

5 files changed

+86
-25
lines changed

Podfile.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ PODS:
113113
- nanopb/decode (1.30906.0)
114114
- nanopb/encode (1.30906.0)
115115
- PromisesObjC (1.2.12)
116-
- Protobuf (3.17.0)
116+
- Protobuf (3.18.0)
117117
- QCloudCore (5.5.2)
118118
- QCloudCOSXML/Transfer (5.5.2):
119119
- QCloudCore (= 5.5.2)
@@ -136,11 +136,11 @@ PODS:
136136
- TIoTLinkKit_IJKPlayer (1.0.2)
137137
- TIoTLinkKit_TPNS (1.0.1)
138138
- TIoTLinkKit_WechatOpenSDK (1.0.1)
139-
- TIoTLinkThirdPartyKit/XP2P-iOS (2.2.1)
139+
- TIoTLinkKit_XP2P (2.2.0)
140140
- TIoTLinkVideo (1.0.0):
141141
- CocoaLumberjack (= 3.7.2)
142142
- TIoTLinkKit_Faac (= 2.0.5)
143-
- TIoTLinkThirdPartyKit/XP2P-iOS (= 2.2.1)
143+
- TIoTLinkKit_XP2P (= 2.2.0)
144144
- TrueTime (5.0.3)
145145
- TXLiteAVSDK_TRTC (8.0.9644)
146146
- TZImagePickerController (3.2.1)
@@ -212,7 +212,7 @@ SPEC REPOS:
212212
- TIoTLinkKit_IJKPlayer
213213
- TIoTLinkKit_TPNS
214214
- TIoTLinkKit_WechatOpenSDK
215-
- TIoTLinkThirdPartyKit
215+
- TIoTLinkKit_XP2P
216216
- TrueTime
217217
- TXLiteAVSDK_TRTC
218218
- TZImagePickerController
@@ -251,7 +251,7 @@ SPEC CHECKSUMS:
251251
MJRefresh: ed450d6eb9d3346a2cb033ab7eb6de090aeef437
252252
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
253253
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
254-
Protobuf: 7327d4444215b5f18e560a97f879ff5503c4581c
254+
Protobuf: 1a37ebea1338949e9ac35a3f06e80b3f536eec8d
255255
QCloudCore: b91a762d280f0a80cc6f537fd186ac43a4a3025e
256256
QCloudCOSXML: a30ab17f45b0cbbcbb218a3677298498e8748a22
257257
SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681
@@ -262,8 +262,8 @@ SPEC CHECKSUMS:
262262
TIoTLinkKit_IJKPlayer: e47c3fed6b204e7544f84a24310cab7a372854d1
263263
TIoTLinkKit_TPNS: 7cea4fc1d20ef6c4c11c4f0b66bbb10ecf4ed968
264264
TIoTLinkKit_WechatOpenSDK: 7822d68cc5c46edf3f6020422202e7b65ea87614
265-
TIoTLinkThirdPartyKit: 097ce7631d6bb13bcb90a0319d4ac5ca360ee012
266-
TIoTLinkVideo: e17a950ec65815269b5695f239e7f245fb27b375
265+
TIoTLinkKit_XP2P: 81481cd6d1b16e156cd3a96300601bde8737a341
266+
TIoTLinkVideo: 2e2632095bae0cb7c03d764bddd5d4827906a6f8
267267
TrueTime: b49551ffafb28a9dee04e51b226f42a416010842
268268
TXLiteAVSDK_TRTC: e3383a81565e8bb2aaaaab4bd099ad5239cd5b2d
269269
TZImagePickerController: bf4c57b98d8707fce41ea6be872414a71c7a8c9d

Source/LinkSDKDemo/Video/P2P/Controller/TIoTDemoPreviewDeviceVC.m

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ @interface TIoTDemoPreviewDeviceVC ()<UITableViewDelegate,UITableViewDataSource>
7777
@property (nonatomic, assign) CFTimeInterval startIpcP2P;
7878
@property (nonatomic, assign) CFTimeInterval endIpcP2P;
7979

80+
@property (nonatomic, assign) BOOL is_ijkPlayer_stream; //通过播放器 还是 通过裸流拉取数据
8081
@end
8182

8283
@implementation TIoTDemoPreviewDeviceVC
@@ -85,6 +86,7 @@ - (void)viewDidLoad {
8586
[super viewDidLoad];
8687
// Do any additional setup after loading the view.
8788

89+
_is_ijkPlayer_stream = YES;
8890
//关闭日志
8991
// [TIoTCoreXP2PBridge sharedInstance].logEnable = NO;
9092

@@ -1133,17 +1135,12 @@ - (void)stopPlayMovie {
11331135
}
11341136

11351137
- (void)configVideo {
1136-
if ([TIoTCoreXP2PBridge sharedInstance].writeFile) {
1137-
UILabel *fileTip = [[UILabel alloc] initWithFrame:self.imageView.bounds];
1138-
fileTip.text = @"数据帧写文件中...";
1139-
fileTip.textAlignment = NSTextAlignmentCenter;
1140-
fileTip.textColor = [UIColor whiteColor];
1141-
[self.imageView addSubview:fileTip];
1142-
if (self.isNVR == NO) {
1143-
[[TIoTCoreXP2PBridge sharedInstance] startAvRecvService:self.deviceName?:@"" cmd:@"action=live"];
1144-
}
1145-
1146-
}else {
1138+
1139+
// 1.通过播放器发起的拉流
1140+
if (_is_ijkPlayer_stream) {
1141+
[TIoTCoreXP2PBridge sharedInstance].writeFile = YES;
1142+
[TIoTCoreXP2PBridge recordstream:self.deviceName]; //保存到 document 目录 video.data 文件,需打开writeFile开关
1143+
11471144
[self stopPlayMovie];
11481145
#ifdef DEBUG
11491146
[IJKFFMoviePlayerController setLogReport:YES];
@@ -1169,12 +1166,26 @@ - (void)configVideo {
11691166
[self.imageView addSubview:self.player.view];
11701167
[self.player resetHubFrame:self.player.view.frame];
11711168

1172-
// [self.player setOptionIntValue:10 * 1000 forKey:@"analyzeduration" ofCategory:kIJKFFOptionCategoryFormat];
1169+
// [self.player setOptionIntValue:10 * 1000 forKey:@"analyzeduration" ofCategory:kIJKFFOptionCategoryFormat];
11731170
[self.player setOptionIntValue:25 * 1024 forKey:@"probesize" ofCategory:kIJKFFOptionCategoryFormat];
11741171
[self.player setOptionIntValue:0 forKey:@"packet-buffering" ofCategory:kIJKFFOptionCategoryPlayer];
11751172
[self.player setOptionIntValue:1 forKey:@"start-on-prepared" ofCategory:kIJKFFOptionCategoryPlayer];
11761173
[self.player setOptionIntValue:1 forKey:@"threads" ofCategory:kIJKFFOptionCategoryCodec];
11771174
[self.player setOptionIntValue:0 forKey:@"sync-av-start" ofCategory:kIJKFFOptionCategoryPlayer];
1175+
1176+
}else {
1177+
// 2.通过裸流服务拉流
1178+
[TIoTCoreXP2PBridge sharedInstance].writeFile = YES; //是否保存到 document 目录 video.data 文件
1179+
1180+
UILabel *fileTip = [[UILabel alloc] initWithFrame:self.imageView.bounds];
1181+
fileTip.text = @"数据帧写文件中...";
1182+
fileTip.textAlignment = NSTextAlignmentCenter;
1183+
fileTip.textColor = [UIColor whiteColor];
1184+
[self.imageView addSubview:fileTip];
1185+
if (self.isNVR == NO) {
1186+
[[TIoTCoreXP2PBridge sharedInstance] startAvRecvService:self.deviceName?:@"" cmd:@"action=live"];
1187+
}
1188+
11781189
}
11791190
}
11801191

Source/SDK/LinkVideo/TIoTCoreXP2PBridge.h

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,81 @@
99
NS_ASSUME_NONNULL_BEGIN
1010

1111
@protocol TIoTCoreXP2PBridgeDelegate <NSObject>
12+
13+
/*
14+
* 裸流接口使用方式:
15+
* 通过 startAvRecvService 和 stopAvRecvService 接口,可以启动和停止裸流传输
16+
* 客户端拉取到的裸流数据对应 data 参数
17+
*/
1218
- (void)getVideoPacket:(uint8_t *)data len:(size_t)len;
1319
@end
1420

1521

1622
@interface TIoTCoreXP2PBridge : NSObject
1723
@property (nonatomic, weak)id<TIoTCoreXP2PBridgeDelegate> delegate;
18-
@property (nonatomic, assign)BOOL writeFile; //是否将数据帧写入文档
19-
@property (nonatomic, assign)BOOL logEnable; //log 开关,默认打开
2024

25+
/*
26+
* 开关是否将数据帧写入 Document 目录的 video.data 文件 (后缀可导出后改动)
27+
*/
28+
@property (nonatomic, assign)BOOL writeFile;
29+
30+
/*
31+
* 是否打印 SDK Log,默认打开
32+
*/
33+
@property (nonatomic, assign)BOOL logEnable;
34+
35+
/*
36+
* 获取版本号
37+
*/
2138
+ (NSString *)getSDKVersion;
2239
+ (instancetype)sharedInstance ;
2340

24-
// 调试SDK功能可以使用此接口,OEM请使用下面的start xp2pinfo, 以防止sec_id ,sec_key泄露
41+
/*
42+
* 调试SDK功能可以使用此接口,OEM请使用下面的start xp2pinfo, 以防止sec_id ,sec_key泄露
43+
*/
2544
- (void)startAppWith:(NSString *)sec_id sec_key:(NSString *)sec_key pro_id:(NSString *)pro_id dev_name:(NSString *)dev_name ;
2645

27-
// OEM 版本推荐使用此接口,sec_id, sec_key 传@""即可。 此接口需传从自建服务获取到的 xp2pinfo .
46+
/*
47+
* OEM 版本推荐使用此接口,sec_id, sec_key 传@""即可。 此接口需传从自建服务获取到的 xp2pinfo
48+
*/
2849
- (void)startAppWith:(NSString *)sec_id sec_key:(NSString *)sec_key pro_id:(NSString *)pro_id dev_name:(NSString *)dev_name xp2pinfo:(NSString *)xp2pinfo;
2950

30-
51+
/*
52+
* 使用播放器播放时,需先等待 SDK 初始化完成,ready事件(xp2preconnect 通知)之后,即可获取到 http-url
53+
*/
3154
- (NSString *)getUrlForHttpFlv:(NSString *)dev_name;
55+
56+
/*
57+
* 与设备信令交互接口
58+
* 1.设备端回复 app 的消息没有限制
59+
* 2.app 发送给设备的信令,要求不带&符号,信令长度不超过3000个字节
60+
*
61+
* 事例 cmd 参数(action=inner_define&cmd=get_nvr_list)
62+
*/
3263
- (void)getCommandRequestWithAsync:(NSString *)dev_name cmd:(NSString *)cmd timeout:(uint64_t)timeout completion:(void (^ __nullable)(NSString * jsonList))completion;
3364

65+
/*
66+
* 开始停止裸流传输接口,通过代理 getVideoPacket 返回裸流数据
67+
*/
3468
- (void)startAvRecvService:(NSString *)dev_name cmd:(NSString *)cmd;
3569
- (void)stopAvRecvService:(NSString *)dev_name;
3670

71+
/*
72+
* 语音对讲开始结束接口
73+
*/
3774
- (void)sendVoiceToServer:(NSString *)dev_name channel:(NSString *)channel_number;
3875
- (void)stopVoiceToServer;
3976

77+
/*
78+
* 退出 SDK 服务
79+
*/
4080
- (void)stopService:(NSString *)dev_name;
81+
82+
/*
83+
* 调试接口,录制通过播放器拉取的数据流并行保存到 Document 目录的 video.data 文件
84+
* 需提前打开 writeFile 开关
85+
*/
86+
+ (void)recordstream:(NSString *)dev_name;
4187
@end
4288

4389
NS_ASSUME_NONNULL_END

Source/SDK/LinkVideo/TIoTCoreXP2PBridge.mm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,8 @@ - (void)capture:(uint8_t *)data len:(size_t)size {
211211
+ (NSString *)getSDKVersion {
212212
return [NSString stringWithUTF8String:VIDEOSDKVERSION];
213213
}
214+
215+
+ (void)recordstream:(NSString *)dev_name {
216+
startRecordPlayerStream(dev_name.UTF8String);
217+
}
214218
@end

TIoTLinkVideo.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
1717
s.static_framework = true
1818

1919
s.source_files = 'Source/SDK/LinkVideo/**/*.{h,m,c,mm}'
20-
s.dependency 'TIoTLinkThirdPartyKit/XP2P-iOS', '2.2.1'
20+
s.dependency 'TIoTLinkKit_XP2P', '2.2.0'
2121
s.dependency 'TIoTLinkKit_Faac', '2.0.5'
2222
s.dependency 'CocoaLumberjack', '3.7.2'
2323
s.pod_target_xcconfig = {

0 commit comments

Comments
 (0)