音视频播放

要支持音视频播放 就要加一个框架

AVFoundation.framwork

 

#import 

 

@interface AVAudioPlayer NSObject 

 

(id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;

音频文件路径初始化

 

(id)initFileURLWithPath:(NSString *)path;  // Better to use initFileURLWithPath:isDirectory: if you know if the path is directory vs non-directory, as it saves an i/o.

 NSURL 的方法本地路径转化为NSURL要用这个方法

 

(BOOL)prepareToPlay;

预播放   防止刚开始播放前的1~2秒卡顿

 

(BOOL)play;

开始播放

(void)pause;

暂停

(void)stop;

停止

@property(readonlyNSTimeInterval duration; 

播放总时间

@property NSTimeInterval currentTime;

播放当前时间

@property float volume; 

播放音量

@property NSInteger numberOfLoops;

循环次数

 

上一首 下一首 切换需要用代理(AVAudioPlayerDelegate

 

 

 

*****************

视频:

需要导入框架库

MediaPlayer.framework

 

注:弹出播放器的VC要嵌套在NC中才可以  不然就会出问题(不能自动弹出,手动弹出后再点就会崩溃)

 

ios7自带播放器

MP_EXTERN_CLASS_AVAILABLE(3_2) @interface MPMoviePlayerViewController UIViewController

 

(id)initWithContentURL:(NSURL *)contentURL;

vc可以弹出系统自带的视频播放VC

 

 

 

@interface UIViewController (MPMoviePlayerViewController)

(void)presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)moviePlayerViewController;

 

 

 

 

***

视频格式:

.m3u8    苹果专用的流媒体视频格式  安卓的不能用

 

流媒体: 流式的媒体  服务端将视频分割为一小段一小段  每一段都能独立播放  可以下一点看一点

 

 

***

视频播放器可以定制

自定义播放界面

步骤:

创建一个UIView

+(Class)layerClass;                       

 // default is [CALayer class]. Used when creating the underlying layer for the view.

需要定制UIView 时使用

CALayer最大区别在于:CALayer不能接收手势  接收手势的是UIView

CALayer是UIView的底层  UIView是完全依赖CALayer

CALayer主要负责界面的绘制

UIView主要负责显示

 

 

如果定制播放器是要导入框架库的

AVFoundation.framework

 

 

(Class)layerClass

{

    return [AVPlayerLayer class];

}

这样就能安置播放器了

(如果要做游戏就要返回OPenGL的class)

@interface AVPlayerLayer CALayer

 

 

 

@property (nonatomicstrongAVPlayer *player;

AVPlayer作为属性,重写setter方法getter方法

(void)setPlayer:(AVPlayer *)player

{

    AVPlayerLayer *layer (AVPlayerLayer *)self.layer;

    layer.player player;

}

(AVPlayer *)player

{

    return ((AVPlayerLayer *)self.layer).player;

}

 

 

 

 

@interface AVPlayerItem NSObject <</SPAN>NSCopying>

负责处理媒体  获取网络数据

(id)initWithURL:(NSURL *)URL;

 

 

@interface AVPlayer NSObject 

负责播放

(id)initWithPlayerItem:(AVPlayerItem *)item;

(void)play;

 

自定义创建的WYPlayer(继承自UIView)就负责放置显示 

.player _avPlayer;

要把播放的AVPlayer加到定制的WYPlayer

 

 

横竖屏是依赖设置停靠模式

@property(nonatomicUIViewAutoresizing autoresizingMask;    // simple resize. default is UIViewAutoresizingNone

_playView.autoresizingMask UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleHeight;

 

在获取服务器数据之前是不能获取AVPlayerItem的时间的  会崩掉的

获取片源时间必须和服务器有过交互

可以用KVO 监听AVPlayerItem

@property (nonatomicreadonlyAVPlayerItemStatus status;

[_item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionOld NSKeyValueObservingOptionNew context:NULL];

用这个添加监听

 

如果发生变化  就触发一个方法(如下)  (获取片源时间的方法)

当status的值为AVPlayerItemStatusReadyToPlay 就能拿到时间

(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

在这个方法里获取片源时间  

CGFloat totalTime _item.duration.value _item.duration.timescale;

计算时间的标准工时   CMTime提供的

 

在视屏播放提供了现有的方法  可以代替NSTimer的功能  每隔一段时间刷新时间label和slider   写在block中

(id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block;

 

__block WYViewController *vc self;

            [_avPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

                CGFloat curTime vc->_item.currentTime.value vc->_item.duration.timescale;

                

            }];

 

 

(void)seekToTime:(CMTime)time;

利用上面提到的公式进行计算CMTime

然后让_item调用这个方法 就能让播放器播放到指定位置

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值