iOS集成ijkplayer支持rtsp流播放并使用播放样例
来源:互联网 发布:淘宝信用卡分期买手机 编辑:程序博客网 时间:2024/06/04 11:43
ijkplayer一个开源库,基于ffmpeg,支持iOS硬解码
一、下载ijkplayer
地址: https://github.com/Bilibili/ijkplayer
二、进入 ijkplayer-master 文件夹
命令行执行 ./init-iso.sh 下载ffmpeg,时间较长 (网不好会很慢!)
三、编译配置(目的是开启rtsp支持)
在 ijkplayer-master 下的 config 中,打开 module-lite.sh
将 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtp"
修改为 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
并添加 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg"
然后命令行执行:
rm module.sh
ln -s module-lite.sh module.sh
cd ..
cd ios
sh compile-ffmpeg.sh clean
sh compile-ffmpeg.sh all
等待编译结果...
四、打包framework ( iPhone6 plus )
进入 ijkplayer-master/ios/IJKMediaPlayer 打开工程
按下两图配置工程:
五、使用framework ( iPhone6 plus )
#import "ViewController.h"#import <IJKMediaFramework/IJKMediaFramework.h>#define ScreenWidth [UIScreen mainScreen].bounds.size.width#define ScreenHeight [UIScreen mainScreen].bounds.size.height@interface ViewController ()@property(nonatomic,strong) NSURL *url; //流媒体播放地址@property(nonatomic,retain) id<IJKMediaPlayback> ijkPlayer; //播放器@property(nonatomic,strong) UIView *playView; //播放区域@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.url = [NSURL URLWithString:@"rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov"]; //调整参数 IJKFFOptions *options = [IJKFFOptions optionsByDefault]; [options setPlayerOptionIntValue:30 forKey:@"max-fps"]; [options setPlayerOptionIntValue:30 forKey:@"r"]; //跳帧开关 [options setPlayerOptionIntValue:1 forKey:@"framedrop"]; [options setPlayerOptionIntValue:0 forKey:@"start-on-prepared"]; [options setPlayerOptionIntValue:0 forKey:@"http-detect-range-support"]; [options setPlayerOptionIntValue:48 forKey:@"skip_loop_filter"]; [options setPlayerOptionIntValue:0 forKey:@"packet-buffering"]; [options setPlayerOptionIntValue:2000000 forKey:@"analyzeduration"]; [options setPlayerOptionIntValue:25 forKey:@"min-frames"]; [options setPlayerOptionIntValue:1 forKey:@"start-on-prepared"]; [options setCodecOptionIntValue:8 forKey:@"skip_frame"]; [options setFormatOptionValue:@"nobuffer" forKey:@"fflags"]; [options setFormatOptionValue:@"8192" forKey:@"probsize"]; //自动转屏开关 [options setFormatOptionIntValue:0 forKey:@"auto_convert"]; //重连次数 [options setFormatOptionIntValue:1 forKey:@"reconnect"]; //开启硬解码 [options setPlayerOptionIntValue:1 forKey:@"videotoolbox"]; //ijk播放器 self.ijkPlayer = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:options]; //播放区域 self.playView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)]; self.playView.backgroundColor = [UIColor blackColor]; [self.view addSubview:self.playView]; UIView *playingView = [self.ijkPlayer view]; playingView.frame = self.playView.bounds; // playingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.playView insertSubview:playingView atIndex:1]; // [self.ijkPlayer setScalingMode:IJKMPMovieScalingModeFill]; [self installMovieNotificationObservers]; if(![self.ijkPlayer isPlaying]){ [self.ijkPlayer prepareToPlay]; } }//network load state changes- (void)loadStateDidChange:(NSNotification *)notification{ IJKMPMovieLoadState loadState = self.ijkPlayer.loadState; NSLog(@"LoadStateDidChange : %d",(int)loadState);}//when movie playback ends or a user exits playback.- (void)moviePlayBackFinish:(NSNotification *)notification{ int reason = [[[notification userInfo] valueForKey:IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; NSLog(@"playBackFinish : %d",reason);}//- (void)mediaIsPreparedToPlayDidChange:(NSNotification *)notification{ NSLog(@"mediaIsPrepareToPlayDidChange");}// when the playback state changes, either programatically or by the user- (void)moviePlayBackStateDidChange:(NSNotification *)notification{ switch (_ijkPlayer.playbackState) { case IJKMPMoviePlaybackStateStopped: NSLog(@"playBackState %d: stoped", (int)self.ijkPlayer.playbackState); break; case IJKMPMoviePlaybackStatePlaying: NSLog(@"playBackState %d: playing", (int)self.ijkPlayer.playbackState); break; case IJKMPMoviePlaybackStatePaused: NSLog(@"playBackState %d: paused", (int)self.ijkPlayer.playbackState); break; case IJKMPMoviePlaybackStateInterrupted: NSLog(@"playBackState %d: interrupted", (int)self.ijkPlayer.playbackState); break; case IJKMPMoviePlaybackStateSeekingForward: break; case IJKMPMoviePlaybackStateSeekingBackward: break; default: break; }}- (void)installMovieNotificationObservers{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChange:) name:IJKMPMoviePlayerLoadStateDidChangeNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackFinish:) name:IJKMPMoviePlayerPlaybackDidFinishNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaIsPreparedToPlayDidChange:) name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackStateDidChange:) name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:self.ijkPlayer];}- (void)removeMovieNotificationObservers{ [[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMoviePlayerLoadStateDidChangeNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMoviePlayerPlaybackDidFinishNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification object:self.ijkPlayer]; [[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:self.ijkPlayer];}
六、优化
- iOS集成ijkplayer支持rtsp流播放并使用播放样例
- IOS IJKPlayer播放RTSP
- Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)
- HTML5 支持RTSP 视频流播放 之 h5stream 系统配置
- 编译ijkplayer,并添加rtsp、rtmp支持,解决无法播放、unknown、延迟问题
- 使用ijkPLayer播放rtsp协议地址
- Ffmpeg 播放器源码 支持本地网络流播放
- ijkPlayer播放器快速集成使用
- ijkplayer从编译到使用来播放rtsp过程小结
- ios audioqueue 流播放接口
- iOS Bilibili/ijkplayer 集成与使用
- jwplayer流播放,影藏播放地址
- iOS音频流播放、后台播放、远程控制、锁屏封面等总结
- iOS音频流播放、后台播放、远程控制、锁屏封面等总结
- iOS音频流播放、后台播放、远程控制、锁屏封面等总结
- iOS音频流播放、后台播放、远程控制、锁屏封面
- iOS音频流播放、后台播放、远程控制、锁屏封面等总结
- iOS音频流播放、后台播放、远程控制、锁屏封面等总结
- 安卓开发 button控件的文本英文字母自动变大写展示问题
- hive内部表和外部表
- node.js加密模块crypto常用方法介绍
- 利用securecrt在linux与windows之间传输文件
- Redis的服务器安装
- iOS集成ijkplayer支持rtsp流播放并使用播放样例
- Android 收集的常用的一些函数
- 无意中的意外
- Oracle 关于时间计算
- leetcode 2. Add Two Numbers
- android 不使用READ_EXTERNAL_STORAGE权限进行访问sd卡
- html5的一些新增主体元素
- Java知识点积累
- LevelDB详解