-
Notifications
You must be signed in to change notification settings - Fork 146
rawData
shixuemei edited this page Aug 3, 2017
·
7 revisions
在播放过程中,可以通过设置block的方式使得SDK将解码后的视频或音频数据上抛出来
1.1 视频数据上抛的回调方法
@property (nonatomic, copy) KSYPlyVideoDataBlock videoDataBlock;
1.2 音频数据上抛的回调方法
@property (nonatomic, copy) KSYPlyAudioDataBlock audioDataBlock
- 解码后的视频数据格式为YUV
- 解码后的音频数据格式为PCM
- 上抛的音频和视频数据是经过同步处理的
- 如果希望由上层来进行渲染动作,而不是底层播放器,建议将播放器属性shouldHideVideo设置为YES,底层则不再进行视频的渲染,不建议采用不绑定view的方式来隐藏画面
- 如果希望由上层控制音频输出,建议将播放器属性shouldMute设置为YES
- 该方法中返回的视频数据,为播放内容中的原始数据,如果内容自带rotate信息,渲染后看到的宽高与原始数据的宽高正好相反,可通过naturalRotate获取内容中的rotate信息
在demo中,演示了如何使用AVFoundation方法将原始音频数据(不含有UI)保存为MP4文件。
如果你希望录制带有UI的文件,请参考这里
使用方法:进入播放页面,点击右上角的"其它"按钮,选择"开始/停止录制"滑块即可,录制下来的文件为:/Documents/PlayerRec.mp4
v2.3.0及以上版本支持该功能
_AVWriter = [[KSYAVWriter alloc]initWithDefaultCfg];
如果觉得默认值合适,可忽略该步骤
属性 | 说明 | 默认值 |
---|---|---|
bWithVideo | 是否录制视频 | YES |
videoBitrate | 视频码率 | 单位是kbps,默认值为2000kbps |
audioBitrate | 音频码率 | 单位是kbps,默认值为64kbps |
_AVWriter.videoBitrate = 1000;
_AVWriter.videoBitrate = 48
demo中录制下来的视频宽高,音频采样率、声道数等编码参数,均使用的是原始音视频编码参数
[_AVWriter setMeta:[_player getMetadata:MPMovieMetaType_Audio] type:KSYAVWriter_MetaType_Audio];
[_AVWriter setMeta:[_player getMetadata:MPMovieMetaType_Video] type:KSYAVWriter_MetaType_Video];
如果不希望按照原始参数录制,可自行修改KSYAVWriter中的相关配置,并忽略该步骤。
url为文件在沙盒中的存储路径,后缀必须为".mp4",目前暂时只支持这种格式
[_AVWriter setUrl:[NSURL URLWithString:[NSString stringWithFormat:@"%@%s", NSHomeDirectory(), "/Documents/PlayerRec.mp4"]]];
[_AVWriter startRecord];
调用KSYAVWriter中的processVideoSampleBuffer方法写入视频的CMSampleBufferRef数据
_player.videoDataBlock = ^(CMSampleBufferRef sampleBuffer){
//写入视频sampleBuffer
[weakSelf.AVWriter processVideoSampleBuffer:sampleBuffer];
};
调用KSYAVWriter中的processAudioSampleBuffer方法写入音频的CMSampleBufferRef数据
_player.audioDataBlock = ^(CMSampleBufferRef sampleBuffer){
[weakSelf.AVWriter processAudioSampleBuffer:sampleBuffer];
};
//停止写入
[_AVWriter stopRecord];