Giter Site home page Giter Site logo

ksvc / ksymediaplayer_ios Goto Github PK

View Code? Open in Web Editor NEW
564.0 23.0 144.0 1.08 GB

金山云iOS播放SDK(KSYUN Live Streaming player SDK),支持RTMP HTTP-FLV HLS 协议(supporting RTMP HTTP-FLV HLS protocol),直播延时2-3秒(Living delay 2 or 3 seconds)

Home Page: http://v.ksyun.com/

License: Apache License 2.0

Ruby 0.48% Objective-C 99.52%
player player-recording

ksymediaplayer_ios's Introduction

金山云KSYMediaPlayer iOS SDK使用手册

Apps UsingDownloads

CocoaPods version CocoaPods platform CocoaPods doc

Source Type: Binary SDK
Charge Type: free of charge

阅读对象

本文档面向所有使用金山云播放SDK的开发、测试人员等, 要求读者具有一定的iOS编程开发经验,并且要求读者具备阅读wiki的习惯。

|vod_1.png|vod_2.png|

|vod_3.png|vod_4.png|

1. 概述

金山云播放内核涵盖Android、iOS、Flash和浏览器插件四个平台,基于FFmpeg自主研发音视频媒体播放内核,作为一款全平台兼容的软件播放方案,金山云播放内核提供了跨终端平台的播放器SDK,以及开放的音视频播放、控制接口和完整的开源调用示例,不仅极大降低开发门槛,同时支持客户快速在多个平台发布产品。
KSYMediaPlayer iOS SDK是金山云播放内核官方推出的iOS平台上使用的软件开发工具包(SDK),为iOS开发者提供简单、快捷的接口,帮助开发者实现iOS平台上的多媒体播放应用。

简要说明:

  • 金山云播放SDK提供了iOS平台直播播放、点播播放能力,不限制用户的拉流地址。用户可以只使用金山云直播SDK而不使用金山云的云服务。
  • 金山云播放SDK不收取任何授权使用费用(免费使用),不含任何失效时间或者远程下发关闭的后门。同时金山云播放SDK也不要求ak/sk等鉴权,没有任何用户标识信息。
  • 金山云播放SDK同时内建了业内一流的H.265解码能力,H.265能力也是免费使用,欢迎集成使用。
  • 金山云播放SDK当前未提供开源代码,如果需要其他定制化开发功能,请通过金山云商务渠道联系。

1.1 版本信息

LICENSE和版本信息:LICENSE

1.2 关于热更新

金山云SDK保证,提供的KSYMediaPlayer iOS播放SDK未使用热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。

1.3 关于费用

金山云SDK保证,提供的KSYMediaPlayer iOS播放SDK可以用于商业应用,不会收取任何SDK使用费用。但是基于KSYMediaPlayer iOS播放SDK的其他商业服务,会由特定供应商收取授权费用,大致包括:

  1. 云存储
  2. CDN分发

2. KSYMediaPlayer SDK 功能说明

功能特性

  • 与系统播放器MPMoviePlayerController接口一致,可以无缝快速切换至KSYMediaPlayer;
  • 本地全媒体格式支持, 并对主流的媒体格式(mp4, avi, wmv, flv, mkv, mov, rmvb 等 )进行优化;
  • 支持广泛的流式视频格式, HLS, RTMP, HTTP Rseudo-Streaming 等;
  • 低延时直播体验,配合金山云推流sdk,可以达到全程直播稳定的4秒内延时;
  • 实现快速满屏播放,为用户带来更快捷优质的播放体验;
  • 支持画面旋转,音量调节等各种功能;
  • 版本适配支持iOS 7.0以上版本;
  • 业内一流的H.265解码;
  • 2M大小的超轻量级直播sdk;
  • 提供了支持直播和点播两个静态库,相比直播,点播支持了更丰富的封装格式和音视频编解码格式,二者支持的具体功能如下:
直播 点播(完整包含直播所有功能)
流协议 HLS, RTMP, HTTP, FILE, HTTPS, RTSP HLS, RTMP, HTTP, FILE, RTSP, HTTPS
封装格式 FLV, TS, MPEG, MOV, M4V, MP3 FLV, TS, MPEG, MOV, M4V, MP3, GIF, AVI, ASF, MKV, WAV, WEBM, RM
视频编码格式 H264, H265, MPEG4 H263, H264, H265, MPEG2, MPEG4, MJPEG, VC-1, WMV, RV40, PNG, JPEG, YUV, WEBP, TIFF
音频编码格式 AAC, MP3, NELLYMOSER, SPEEX AAC, MPEG(MP1/MP2/MP3), AMR, APE, DTS, FLAC, PCM, OGG, WMA, COOK, NELLYMOSER, SPEEX

直播静态库位于:framework/live
直播动态库位于:framework/live_dy
点播静态库位于:framework/vod ,vod库包括live库所有功能。
点播动态库位于:framework/vod_dy ,vod库包括live库所有功能。

功能列表

3. 运行环境

KSYMediaPlayer iOS SDK可运行于 iPhone/iPod Touch/iPad,支持 iOS 7.0 及以上版本; 支持 armv7/arm64以及虚拟机运行。

4.下载工程

本SDK提供如下两种获取方式:

  • 从github下载;
  • 从bitbucket下载;
  • 使用Cocoapods安装;

更新日志查看地址:https://github.com/ksvc/KSYMediaPlayer_iOS/releases;

4.1 github下载

从github下载:https://github.com/ksvc/KSYMediaPlayer_iOS;

$ git clone https://github.com/ksvc/KSYMediaPlayer_iOS.git --depth 1

如果获取到zip格式的压缩包,解压缩后包含demo、doc、framework、README.md四个部分, 目录结构如下所示:

  • domo/ 目录存放KSYPlayerDemo,执行pod install命令后,双击打开KSYPlayerDemo.xcworkspace即可使用iOS示例工程,用于帮助开发都快速了解如何使用SDK。
  • doc/ 目录存放接口参考文档,双击打开html/index.html即可看到相关appledoc风格的接口说明,也可以查看在线版
  • framework/ 目录存放了KSYMediaPlayer.framework,该库支持armv7/arm64/x86_64和i386四种体系结构。
  • README.md 即本文档。

4.2 bitbucket下载

对于部分地方访问github比较慢的情况,可以从bitbucket下载,获取的库内容和github一致。

$ git clone https://bitbucket.org/ksvc/ksymediaplayer_ios.git --depth 1

4.3 Cocoapods安装

通过Cocoapods能将静态库framework下载到本地,只需要将如下语句加入你的Podfile:

   pod 'KSYMediaPlayer_iOS'

执行pod install或者pod update后,将SDK加入工程。

为满足不同用户的需求,本SDK提供了两个不同的子模块

  • KSYMediaPlayer_live : 用于直播的静态库
  • KSYMediaPlayer_vod : 用于点播的静态库(从2.7.0版本开始支持pod引用点播静态库)

KSYMediaPlayer_iOS默认的子模块是KSYMediaPlayer_live,也就是说Podfile中直接填写

 pod 'KSYMediaPlayer_iOS'

等同于

 pod 'KSYMediaPlayer_iOS/KSYMediaPlayer_live'

如果您希望通过pod方式引用点播库,那么需要在podfile这样写:

 pod 'KSYMediaPlayer_iOS/KSYMediaPlayer_vod'

由于cocoapod的问题,目前暂不支持pod方式引用动态库

Pod依赖进阶
  • 本地开发版 (sdk clone或下载到本地后)
pod 'KSYMediaPlayer_iOS/KSYMediaPlayer_live', :path => '../'  
  • 直接指定SDK的github仓库地址和版本号
pod 'KSYMediaPlayer_iOS/KSYMediaPlayer_live', :git => 'https://github.com/ksvc/KSYMediaPlayer_iOS.git', :tag => 'v2.7.0'
  • 从cocoapod官方库Trunk获取spec, 从github下载sdk
pod ''KSYMediaPlayer_iOS/KSYMediaPlayer_live'
  • 如果pod install 时出现无法找到specification的提示, 请先更新repo
pod repo update
  • 注意1: 不能将以上语句都加入Podfile, 他们作用是一样的, 只是Podspec读取位置不同.

5. 快速集成

快速集成中提供了集成金山云播放SDK的基本方法。 具体可以参考demo工程中的相应文件。

6. 注意事项

  • 推流的SDK中已经包涵了本framework,如需要推流功能,请直接下载推流SDKhttps://github.com/ksvc/KSYLive_iOS,并参考其中的使用手册。本文所介绍的仅限于iOS播放SDK。
  • 本framework可能与其他使用了FFmpeg的静态库冲突。
  • 本framework为静态库,虽然库的大小为20M+,但是最后链接后,对app的增量只有2M+。

7. 详细介绍

关于集成本SDK更详细的介绍请参考:https://github.com/ksvc/KSYMediaPlayer_iOS/wiki
主要接口说明请参考:http://ksvc.github.io/KSYMediaPlayer_iOS/doc/html/index.html

8. 反馈与建议

8.1 反馈模板

类型   描述
SDK名称 KSYMediaPlayer_iOS
SDK版本 v2.5.0
设备型号 iphone7
OS版本 iOS 10
问题描述 描述问题出现的现象
操作描述 描述经过如何操作出现上述问题                    
额外附件 文本形式控制台log、crash报告、其他辅助信息(界面截屏或录像等)

8.2 联系方式

金山云计算

ksymediaplayer_ios's People

Contributors

fpzeng avatar ksysdkci avatar mayudong1 avatar noiled avatar shixuemei avatar sujia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ksymediaplayer_ios's Issues

视频快进获取缩略图卡顿

下面两句代码我是放到了Slider的valueChange方法里的,滑动了Slider就去获取缩略图 然后显示出来

 UIImage *thumbImage=[self.prober getVideoThumbnailImageAtTime:interval width:0 height:0];
    
 self.srcImageView.image=thumbImage;

运行之后 ,发现放到主线程里获取缩略图会显得有些卡顿,

然后就改了一下,把获取缩略图的方法放到了子线程里执行,获取到了图片之后放回到主线程设置图片,用gcd创建了一个串行队列,代码如下

dispatch_queue_t queue=dispatch_queue_create("playerCaptureThumbQueue", DISPATCH_QUEUE_SERIAL);
    dispatch_async(queue, ^{
        
        UIImage *thumbImage=[self.prober getVideoThumbnailImageAtTime:interval width:0 height:0];
        dispatch_async(dispatch_get_main_queue(), ^{
           self.srcImageView.image=thumbImage;
        });
  });

运行之后发现获取的缩略图是如代码所设置的,一个一个获取的,当手指松开拖动Slider的时候,UIImageView中显示的图片还是一个一个加载的 会持续一会儿

然后我把串行队列改成了并行队列,程序执行 ,拖动了一下Slider之后,就崩溃了,想问一下有没有解决方案呢。

shouldAutoplay 和 prepareToPlay

shouldAutoplay在prepareToPlay后设置无效。
有场景可能在调用prepareToPlay后发现需要重新设置shouldAutoplay。望处理

Deprecated Notification

Hey,

I am trying to listen for various changes in the player. When I add observers on certain notification names like: MPMediaPlaybackIsPreparedToPlayDidChangeNotification, MPMoviePlayerPlaybackStateDidChangeNotification, MPMoviePlayerPlaybackDidFinishNotification etc.

Deprecated in iOS 9.0: No longer supported. 

网络切换的状态不对

监听 MPMoviePlayerNetworkStatusChangeNotification 通知,在通知里去获取当前播放器的networkStatus,拿到的值是上一次的网络状态,与当前网络不一致。

测试案例 ,蜂窝移动网络关闭,wifi打开,播放视频,然后关闭wifi,这个时候的网络状态应该是不可用的,但是返回的状态还是wifi状态,然后再打开wifi,这个时候返回的状态就是不可用的状态了,但此时网络状态应该是wifi才对。

播放过程中分辨率改变了

播放过程中有的推流地址分辨率改变了,监听了尺寸改变的通知,可SDK没有好像没有提供解决方案,可用此地址rtmp://rlive.jia.360.cn/live_jia_public/36060744749放到Demo中测试

請問這是開源的SDK嗎?

請問使用此SDK需要收費嗎?是否支援RTSP?可連續播放avi檔案不間斷嗎?是否可提供點播framework 的範例程式?有swift語法的更好.

iOS端加载流走 MPMoviePlayerPlaybackDidFinishNotification 通知,但是同一个流在PC端是可以播放的

在iOS和Android端都会遇到的同一个问题,因为需求原因同一个直播间的直播流是动态变化的,每次进入直播间的流都不同,加载多次之后偶发性的会走 MPMoviePlayerPlaybackDidFinishNotification 这个通知方法,测试走 MPMoviePlayerPlaybackDidFinishNotification 通知的流在PC端是可以播放的。请问这个可能是什么原因造成的呢?

iOS版本在iphone5手机ios7下运行crash

如图:出现类似诸如“KSYReachabillity.o was built for newer iOS version(8.0) than being linked 7.0”的警告(有数十个),运行在iOS8.1、9.0、10.3的机子上均正常,但运行在iphone5 ios7.1的机子上crash。

image

How to change the quality?

Hi.
Thanks for your good project.
I tried with the demo app. The app worked very good. But I found that the quality in publisher is better than player. Could we change the quality?
Thanks.

播放错误,获取错误停止的时间。

我用一个实例去播放不同的视频,类似微博自动播放视频,会出现-10011这个错误,频率比较高。报错日志:
2017-09-14 20:01:55.277735+0800 AmusementVideo[16604:4096166] FFP_MSG_SEEK_COMPLETE
2017-09-14 20:01:55.291854+0800 AmusementVideo[16604:4096166] FFP_MSG_BUFFERING_END
2017-09-14 20:01:55.292018+0800 AmusementVideo[16604:4096166] loading cost 1.845417 seconds with 33 times
2017-09-14 20:01:55.293864+0800 AmusementVideo[16604:4096166] player playback state: 1
after scale width 1280 height 720

如何获得 1.845417这个时间点?

isPreparedToPlay参数失效

isPreparedToPlay参数不正确。MPMediaPlaybackIsPreparedToPlayDidChangeNotification监听还没有告诉已经准备好了,但是调用isPreparedToPlay参数返回true,返回已经准备好状态。

當發佈端停止發佈音頻時,視頻卡住

  1. 當發佈端停止發佈音頻時,視頻卡住不動。
    發佈端重新發佈音頻時,視頻快轉(緩衝部分),音頻正常。
  2. 當發佈端停止發佈音頻時,視頻卡住不動。
    播放端重新連接視頻,視頻正常,
    接著發佈端重新發佈音頻,播放端無聲音。

工程导入报错

/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:142:1: error: unknown type name 'MP_EXTERN'
MP_EXTERN NSString *const MPMediaPlaybackIsPreparedToPlayDidChangeNotification;
^
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:142:19: error: expected ';' after top level declarator
MP_EXTERN NSString *const MPMediaPlaybackIsPreparedToPlayDidChangeNotification;
^
;
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:145:1: error: unknown type name 'MP_EXTERN'
MP_EXTERN NSString * const MPMoviePlayerPlaybackStateDidChangeNotification;
^
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:145:19: error: expected ';' after top level declarator
MP_EXTERN NSString * const MPMoviePlayerPlaybackStateDidChangeNotification;
^
;
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:148:1: error: unknown type name 'MP_EXTERN'
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishNotification;
^
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:148:19: error: expected ';' after top level declarator
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishNotification;
^
;
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:149:1: error: unknown type name 'MP_EXTERN'
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (MPMovieFinishReason)
^
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:149:19: error: expected ';' after top level declarator
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (MPMovieFinishReason)
^
;
/Users/lyy/Desktop/研究/嘉定残联/sunhome_jdcl(workingcopy)/Pods/KSYMediaPlayer_iOS/framework/vod/KSYMediaPlayer.framework/Headers/KSYMoviePlayerDefines.h:152:1: error: unknown type name 'MP_EXTERN'
MP_EXTERN NSString * const MPMoviePlayerLoadStateDidChangeNotification;

加载直播或者播放直播中 会崩溃

使用的sdk的版本是2.5.0 iPhone6 plus 10.3.2
0 CoreFoundation 0x000000018930eff8 + 148
1 libobjc.A.dylib 0x0000000187d70538 objc_exception_throw + 56
2 CoreFoundation 0x000000018930ef28 + 0
3 jiuduzhibo 0x1003b10cc jiuduzhibo + 3870924
4 libsystem_platform.dylib 0x00000001883cd30c _sigtramp + 36
5 KSYMediaPlayer 0x0000000100efc988 av_packet_unref + 20
6 KSYMediaPlayer 0x0000000100efc988 av_packet_unref + 20
7 KSYMediaPlayer 0x0000000100e5bd84 stream_component_close + 200
8 KSYMediaPlayer 0x0000000100e58324 stream_close + 160
9 KSYMediaPlayer 0x0000000100e59838 ffp_wait_stop_l + 64
10 KSYMediaPlayer 0x0000000100e6f9fc -[IJKFFMoviePlayerController shutdownWaitStop:] + 44
11 Foundation 0x0000000189e022d8 + 996
12 libsystem_pthread.dylib 0x00000001883d168c + 240
13 libsystem_pthread.dylib 0x00000001883d159c + 0
14 libsystem_pthread.dylib 0x00000001883cecb4 thread_start + 4

在iOS 8.2 9 10 11的系统中中都会出现这条崩溃记录
根据我们的跟踪统计出来 这个崩溃原因占比很高

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.