美文网首页
“音视频+相册”了解

“音视频+相册”了解

作者: Kevin_wzx | 来源:发表于2017-04-17 15:17 被阅读19次

    1.音频播放

    iOS开发中的音频播放大致分为两类:一种是短音频(通常称为音效,时长不超过30s),一种是长音频(通常称为音乐)。前者通常可以通过AudioToolbox.framework进行操作(由一系列C语言的函数构成),后者要使用AVFoundation.framework(用Objective-C封装好的一系列的类)。 播放音效(短音频)通常打包成.caf、.aif和.wav格式。下面为大家封装了一段播放音频的代码,由于音频播放的AudioToolBox底层都是C函数,所以使用了函数指针,不熟悉的可以翻翻之前C的东西

    - (void)playSoundEffect:(NSString *)name withCallback:(void (*)(SystemSoundID, void *)) callback {
        NSString *audioFile = [[NSBundle mainBundle] pathForResource:name ofType:nil];
        NSURL *fileUrl = [NSURL fileURLWithPath:audioFile];
    
        SystemSoundID soundID;
        // 在系统中创建一个音效对象并获得其唯一ID
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
        // 注册在播放完之后执行的回调函数
        // 第二个和第三个参数跟循环播放有关
        // 第五个参数是指向传给回调函数的数据的指针
        AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, callback, NULL);
        // 播放音效
        AudioServicesPlaySystemSound(soundID);
        // 播放音效并震动
        // AudioServicesPlayAlertSound(soundID);
    }
    

    播放音乐可以使用AVAudioPlayer类:

     NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:@"后会无期" ofType:@"mp3"];
        NSURL *url = [NSURL fileURLWithPath:path];
        self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
        self.player.volume = 5;
        self.player.delegate = self;
        [self.player prepareToPlay];
        [self.player play];
    

    Demo代码如下:

    屏幕快照 2017-04-17 下午3.12.12.png 屏幕快照 2017-04-17 下午3.12.46.png 屏幕快照 2017-04-17 下午3.13.03.png 屏幕快照 2017-04-17 下午3.13.40.png

    2.录音

    使用AVAudioRecorder可以实现录音功能;代码如下:

     NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                [NSNumber numberWithInt:AVAudioQualityLow], AVEncoderAudioQualityKey,
                [NSNumber numberWithInt:16], AVEncoderBitRateKey,
                [NSNumber numberWithInt:2],AVNumberOfChannelsKey,
                [NSNumber numberWithFloat:44100.0],AVSampleRateKey,
                nil
        ];
        NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/record.caf", [[NSBundle mainBundle] resourcePath]]];
        self.recorder = [[AVAudioRecorder alloc] initWithURL:url settings:dict error:nil];
        [self.recorder prepareToRecord];
    

    Demo代码如下:

    屏幕快照 2017-04-17 下午3.36.39.png 屏幕快照 2017-04-17 下午3.37.57.png 屏幕快照 2017-04-17 下午3.39.32.png

    3.视频播放

    屏幕快照 2017-04-17 下午3.42.51.png

    Demo代码如下:

    屏幕快照 2017-04-17 下午3.48.01.png

    效果如下:

    屏幕快照 2017-04-17 下午3.49.42.png

    4.相机和相册

    • 开启相机或相册的代码如下所示:
    // 创建一个图像选择视图控制器
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    // 检查相机是否可用
    if ([UIImagePickerController 
            isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        // 相机可用就使用相机
        ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
    }
    else {
        // 相机不可用就使用相册
        ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }
    // 允许编辑照片
    ipc.allowsEditing = YES;
    // 绑定委托
    ipc.delegate = self;
    [self presentViewController:ipc animated:YES completion:nil];
    
    • UIImagePickerControllerDelegate的两个回调方法:
    // 选中照片执行的回调方法
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        // info参数是一个字典,可以取出原始照片或编辑后的照片
    }
    // 取消选择照片的回调方法
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    
    }
    

    说明:在开启相机时可以通过设置UIImagePickerController对象的mediaTypes属性来支持摄像操作,摄像完成后需要调用UISaveVideoAtPathToSavedPhotosAlbum函数将保存在临时文件夹下的视频文件保存到相册中,当然在此之前最好用UIVideoAtPathIsCompatibleWithSavedPhotosAlbum函数判断能否保存,在此之后可以通过NSFileManager对象的removeItemAtPath:error:方法将临时文件删除

    Demo代码如下:

    屏幕快照 2017-04-17 下午3.55.49.png 屏幕快照 2017-04-17 下午4.06.19.png 屏幕快照 2017-04-17 下午4.06.39.png 屏幕快照 2017-04-17 下午4.08.09.png

    注意在plist文件中添加相应属性(否则会奔溃):
    NSMicrophoneUsageDescription
    NSCameraUsageDescription
    NSPhotoLibraryUsageDescription

    屏幕快照 2017-04-17 下午4.17.55.png

    效果:

    屏幕快照 2017-04-17 下午4.05.24.png 屏幕快照 2017-04-17 下午4.04.42.png A31191E245411962143C3196273598A2.png E32CD7B6FF063C4A15022E5E185687D7.png 屏幕快照 2017-04-17 下午3.59.00.png 屏幕快照 2017-04-17 下午3.59.12.png 屏幕快照 2017-04-17 下午3.59.19.png 屏幕快照 2017-04-17 下午3.59.27.png

    补充拓展:

    屏幕快照 2017-04-17 下午4.11.24.png
    参考内容:控制器了解篇章中的 UIImagePickController部分:http://www.jianshu.com/p/6ce0a8cdc02a

    相关文章

      网友评论

          本文标题:“音视频+相册”了解

          本文链接:https://www.haomeiwen.com/subject/nualnttx.html