IOS 流媒体播放器 源代码
来源:互联网 发布:淘宝模拟装机 编辑:程序博客网 时间:2024/06/13 04:04
需要导入两个系统库文件CoreMedia.framework 和 AVFoundation.framework,
MediaPlayer-Prefix.pch 文件
#import<Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __OBJC__
#import<UIKit/UIKit.h>
#import<Foundation/Foundation.h>
//在预编译头文件中导入头文件A相当于在每个.m中导入该头文件A 因为基本上每个.m文件中都要用到
#import<AVFoundation/AVFoundation.h>
#endif
注意:将 ViewController.xib 要关联的类设置为WJPlayView,操作在之前的博客中说过。
ViewController.h 文件
#import<UIKit/UIKit.h>
@interface ViewController :UIViewController
@property (weak,nonatomic) IBOutletUIView *backView;
@property (weak,nonatomic) IBOutletUILabel *currentTimeLabel;
@property (weak,nonatomic) IBOutletUILabel *totalTimeLabel;
@property (weak,nonatomic) IBOutletUISlider *slider;
@property (weak,nonatomic) IBOutletUIButton *playBtn;
- (IBAction)playBtnClicked:(id)sender;
- (IBAction)sliderProgerssValue:(id)sender;
@end
#import"ViewController.h"
@interfaceViewController ()
{
//实例化一个电影对象
AVPlayerItem *myMovie;
//实例化一个播放器
AVPlayer *myPlay;
NSTimer * refreshTimer;
}
- (void)refreshProgress;
@end
@implementation ViewController
//weatherClicked开始为NO,表示播放。当第一次点击按钮时,变为YES,表示暂停
BOOL weatherClicked =NO;
- (void)viewDidLoad
{
[superviewDidLoad];
//全屏播放
self.wantsFullScreenLayout =YES;
//屏幕大小,不写死的写法
self.view.frame = [UIScreenmainScreen].bounds;
self.view.backgroundColor = [UIColorblackColor];
//播放网络视频
//myMovie = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://ocj2.smgbb.cn/ocj2/ocj2.m3u8"]];
//播放本地音频,视频文件
NSString *movePath = [[NSBundlemainBundle] pathForResource:@"bsm"ofType:@"mp4"];
myMovie = [AVPlayerItemplayerItemWithURL:[NSURLfileURLWithPath:movePath]];
myPlay = [AVPlayerplayerWithPlayerItem:myMovie];
//
AVPlayerLayer *layer = (AVPlayerLayer *)self.view.layer;
layer.player =myPlay;
[myPlayplay];
//记住网络视屏的时间不能用下面的方法获取,只能在 http请求头中去获取,下面的方法只能用于读取本地文件
CMTime totalTime = myMovie.duration;
int seconds = totalTime.value / totalTime.timescale;
_slider.maximumValue = seconds;
_slider.minimumValue =0;
_totalTimeLabel.text = [NSStringstringWithFormat:@"%02d:%02d:%02d",seconds /3600,(seconds % 3600) /60, (seconds % 3600) %60];
_currentTimeLabel.text =@"00:00:00";
refreshTimer = [NSTimerscheduledTimerWithTimeInterval:1/24.0ftarget:selfselector:@selector(refreshProgress)userInfo:nilrepeats:YES];
}
- (void)refreshProgress
{
CMTime currentTime = myMovie.currentTime;
int curPlayTimeSeconds = currentTime.value / currentTime.timescale;
_slider.value = curPlayTimeSeconds;
_currentTimeLabel.text = [NSStringstringWithFormat:@"%02d:%02d:%02d",curPlayTimeSeconds /3600,(curPlayTimeSeconds % 3600) / 60, (curPlayTimeSeconds % 3600) % 60];
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)playBtnClicked:(id)sender {
//每次点击后要取反
weatherClicked = !weatherClicked;
if (weatherClicked) {
[myPlaypause];
//暂停定时器
[refreshTimerisValid];
//注意:下面这句是销毁定时器
//[refreshTimer invalidate];
}else{
[myPlayplay];
//重新开启定时器
[refreshTimerfire];
}
}
- (IBAction)sliderProgerssValue:(id)sender {
CMTime curTimer = myMovie.currentTime;
curTimer.value =_slider.value * curTimer.timescale;
[myPlayseekToTime:curTimer];
int seconds = (int)_slider.value;
_currentTimeLabel.text = [NSStringstringWithFormat:@"%02d:%02d:%02d",seconds /3600,(seconds % 3600) /60, (seconds % 3600) %60];
}
//点击隐藏状态栏和下面的进度条,按钮等,再点击又显示出来
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([UIApplicationsharedApplication].statusBarHidden) {
[[UIApplicationsharedApplication] setStatusBarHidden:NOwithAnimation:UIStatusBarAnimationFade];
[UIViewanimateWithDuration:0.5fanimations:^{
[_backViewsetAlpha:1];
}];
}else{
[[UIApplicationsharedApplication] setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationFade];
[UIViewanimateWithDuration:0.5fanimations:^{
[_backViewsetAlpha:0];
}];
}
}
@end
#import<UIKit/UIKit.h>
@interface WJPlayView :UIView
@end
#import"WJPlayView.h"
@implementation WJPlayView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
//获取view的layer的时候返回avlayer
+(Class)layerClass{
return [AVPlayerLayerclass];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
- IOS 流媒体播放器 源代码
- IOS流媒体播放
- IOS流媒体播放
- IOS流媒体播放
- IOS流媒体播放
- IOS流媒体播放
- IOS流媒体播放
- IOS流媒体播放
- IOS音频的流媒体播放
- Android流媒体播放器
- Android流媒体播放器
- Android流媒体播放器
- Android流媒体播放器
- Android流媒体播放器
- Android流媒体播放器
- 流媒体播放器
- 在iOS设备中播放流媒体
- 说说 IOS mms流媒体(网络电台)播放
- 自动化运维工具Fabric安装配置使用(CentOS6.3)
- uva 10047 The Monocycle
- svn提示文件已过时,请更新工作副本的解决办法,防止冲突发生
- Protobuf语言指南
- 查看ubuntu版本
- IOS 流媒体播放器 源代码
- 河南科技CSDN高校俱乐部2013年纳新啦!
- table中做连接线
- DHCP+TFTP+FTP+PXE启动安装Fedora 14
- OGNL
- 在进程中用户态地址如何得到物理地址
- 各种版本的cocostudio下载
- android jni 执行 shell脚本
- 正确的使用eval()