• Audio/Movie/Image


    Audio

    1. 引入AVFoundation 库,此库用于处理音频的播放。

       > 使用AVAudioPlayer 播放音频,此类只能播放本地音频文件。对于流媒体(边下边播)的播放使用第三方框架实现,比较优秀的有:AudioStreamer, FreeStreamer

          [[AVAudioPlayer alloc] initWithContentsOfURL: error:nil]; // 此处的url是指本地文件的位置,以file:// 开头

       > AVAudioPlayer 方法及属性

          // 准备播放

          [player prepareToPlay];

          // 播放

          [player play];

          // 暂停

          [player pause];

          // 停止

          [player stop];

          // 是否在播放

          player.playing

          // 音频的总时长

          player.duration

          // 音频的音量

          player.volume

          // 音频播放的当前时间

          player.currentTime

          // 音频播放时的循环次数

          player.numberOfLoops  // 0 表示播放一次,1 表示播放两次,依次类推。任何负数表示无限循环播放。

          

          // 代理对象

          player.delegate    协议名称:AVAudioPlayerDelegate

          // 协议方法

             // 一个音频播放完毕时触发此方法

          - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

       > *若音频需支持后台播放,需以下两步操作:

          — 在工程 Info.plist 在根级添加 Required background modes, 再在此项下添加子项:App plays audio or streams audio/video using AirPlay

          — 在代码里配置音频会话 AVAudioSession

              // 每个ios应用都有一个音频会话

              [AVAudioSession sharedInstance]; // 获取唯一实例

              // 设置音频会话类别

              [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];  // 告知系统静止其他应用的音频回放,在锁屏或后台时,仍然可以播放。

              // 激活会话

              [[AVAudioSession sharedInstance] setActive:YES error:nil];

        > *若音频需要远程控制,即由设备下方经滑动弹出显示的控制界面

           - 在播放音频的控制器视图将要显示时,开始接收远程控制事件

              - (void)viewWillAppear:(BOOL)animated {

        [super viewWillAppear:animated];

        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

        [self becomeFirstResponder]; // 使当前视图成为第一响应者

    }

            - 在播放音频的控制器视图将要消失时,结束接收远程控制事件

              - (void)viewWillDisappear:(BOOL)animated {

        [super viewWillDisappear:animated];

        [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

        [self resignFirstResponder];

    }

            - 实现父类方法 

              - (BOOL)canBecomeFirstResponder {

        return YES;

    }  // 此方法默认返回NO

             - 实现父类方法,远程事件接收后的处理

             - (void)remoteControlReceivedWithEvent:(UIEvent *)event {

        if (event.type == UIEventTypeRemoteControl) {

            switch (event.subtype) {

                case UIEventSubtypeRemoteControlPlay:

                case UIEventSubtypeRemoteControlPause:

                          // 播放,暂停音频播放

                    break;

                    case UIEventSubtypeRemoteControlPreviousTrack:

                          // 播放上一首

                    break;

                    case UIEventSubtypeRemoteControlNextTrack:

                          // 播放下一首

                    break;

                default:

                    break;

            }

        }

    }

    2.音频录音 AVAudioRecorder ,使用方式类似AVAudioPlayer,录音保存的路径需设置到沙盒目录下。

    Movie

    1. iOS 视频播放 MediaPlayer 库中的MPMoviePlayerController, 支持本地视频和网络视频播放. .

       > 使用MPMoviePlayerController

          // 初始化

          [MPMoviePlayerController alloc] initWithContentURL:]

          // 设置播放器视图的frame

          moviePlayer.view.frame   

          // *将播放视图添加的父视图上

          [superview addSubview:moviePlayer.view] 

       > MPMoviePlayerController 视频播放时,播放状态等信息不是通过代理来与外界交互,而是通过通知中心。

          // 注册通知

             // 播放状态改变

          [NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackStateDidChangeNotification object:通知的附加内容 ]

             // 播放完成

          [NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackDidFinishNotification object:通知的附加内容 ]

         [扩展] 若想定制播放控制,则需设置player.controlStyle = MPMovieControlStyleNone;

          

    2. 除此之外,iOS中还可以使用视频视图控制器播放视频MPMoviePlayerViewController

        一般以模态的方式弹出全屏播放。

        > 使用 MPMoviePlayerViewController

           // 初始化

           [[MPMoviePlayerViewController alloc] initWithContentURL:]

           // 注册通知

              // 播放状态改变,播放完成是暂停

          [NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackStateDidChangeNotification object:通知的附加内容 ]

              // 播放完成

          [NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackDidFinishNotification object:通知的附加内容 ]

          // 模态方式弹出显示视频播放,不直接将播放起放到父视图控制器上

          [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController]

          /* 此方法是MPMoviePlayerViewController 对UIViewControler 扩展的模态展示方法,增加了一种下拉展示动画效果。仍然可以使用原来的presentViewController: animated: completion:] */

    3. 以上两个播放视频的类,自iOS9开始被弃用,替换使用自iOS8开始的AVKit 下的AVPlayerViewController

    Image

    1. 使用UIImagePickerController (图片选择器) 选择单个图片

       > 初始化 

          [[UIImagePickerController alloc] init]

       > 指定代理对象

          imagePicker.delegate     协议名字<UINavigationControllerDelegate,UIImagePickerControllerDelegate>

       > 设置资源类型/图片来源

          imgPicker.sourceType

          — UIImagePickerControllerSourceTypePhotoLibrary  // 来自设备图片库

          — UIImagePickerControllerSourceTypeCamera         // 来自照相机

          — UIImagePickerControllerSourceTypeSavedPhotosAlbum   // 来自相机保存的相册

       > 显示图片选择器

          [self presentViewController:imgPicker animated: completion:]

       > 实现协议方法获取图片数据

          - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info

          /* info 参数中存储了所选择的图片,注意这里只能是单选的。可通过info中的土资源类型UIImagePickerControllerMediaType判断是否是图片,通过UIImagePickerControllerOriginalImage 获取所选图片的原始图片。

              在获取图片后,要压缩图片,UIImageJPEGRepresentation(imgData, 0.1)一般采用此种方式,第二个参数“压缩因子”,越小,图片就越小。也可采用UIImagePNGRepresentation(imgData) 方式,这种方式比前者压缩后要大些。 */

    2.[扩展] 使用AssetsLibrary或者PhotoLibrary 实现多选图片,也可借助第三方库实现

  • 相关阅读:
    测试人员如何甩锅
    测试用例,写不写?
    软件测试很简单么?
    体系认证、白皮书与行业大会
    对话云层
    专项测试怎样才“好玩”
    k8s环境 构建 工具 kubeadmin 似于openstack自动化工具kollaansible等
    git clone 带入username passed
    数据库ACID REDIS ACID实现
    jforg devops 持续集成交付 软件交付流水线 知识点大方向汇总备忘
  • 原文地址:https://www.cnblogs.com/GJ-ios/p/5705584.html
Copyright © 2020-2023  润新知