• iOS9程序设计(顶级iOS开发视频课程-Objective-C版) 本课程主要内容包括: iOS9的基础知识 常用控件 屏幕适配 多窗口 导航 表视图 GPS 地图 网络 数据存储、 音频 视频 本地化等内容,并提供了大量的...
  • 本课程适合从事音视频,网络通讯开发的程序员。实战案例可用于 音视频处理,无人机,安防,直播等所有音视频领域。课程从Linux音视频采集,到TCP/IP UDP Socket服务器,客户端编程, 如何去定义...
  • iOS视频开发经验

    2016-04-18 13:16:26
    iOS视频开发经验 手机比PC的优势除了便携外,我认为最重要的就是可以快速方便的创作多媒体作品。照片分享,语音输入,视频录制,地理位置。一个成功的手机APP从产品形态上都有这其中的一项或多项,比如instagram,...

    iOS视频开发经验

    手机比PC的优势除了便携外,我认为最重要的就是可以快速方便的创作多媒体作品。照片分享,语音输入,视频录制,地理位置。一个成功的手机APP从产品形态上都有这其中的一项或多项,比如instagram,微信。如果把Web2.0的交互体验照搬到手机上就是死路一条。 当智能手机遇上视频就像潘金莲遇上西门庆,各取所需一拍即合,想不发生点事情都难。他们的结晶就是微视频。微视频可以说把手机的视频录制和碎片时间两个特点发挥到了极致,视频相关的APP现在无温不火的原因我认为跟坑爹的运营商有关。虽然现在移动网络流量小速度慢,但是不妨碍我们先把技术积累做起来。

    这篇文章主要介绍本人在iOS视频开发中的一点经验。

    视频实质:

    纯粹的视频(不包括音频)实质上就是一组帧图片,经过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件组装在一起成为我们看到的视频(movie)文件。1秒内出现的图片数就是帧率,图片间隔越小画面就越流畅,所以帧率越高效果就越好,需要的存储空间也就越多。

    视频编码:

    因为不进行编码的视频数据量非常大,会造成存储和传输上的困难,所以视频文件都需要在录制完成后进行编码。视频编码主要从两个维度压缩数据。

    • 1、单张图像某一区域相邻像素相似,比如一片红色只记录红色色值和区域,不用记录这个区域的每一个像素点。
    • 2、相邻图像之间内容相似,因为相邻两帧要制造连续的效果,所以两帧之间的内容一般非常接近。目前主流的视频编码技术都是用图像编码方法对第一帧进行编码,然后用某种方式描述接下来的帧相对于附近的帧有什么区别。

    视频格式:

    MP4、MOV、AVI、RMVB这些播放格式其实都是封装格式,除了RMVB比较特殊外,其他格式内封装的视频编码格式都是H264,H264以高压缩率闻名于世,压缩效率比MEPG-2提升一倍多,但是世上没有两全其美的事,H264的解码难度提高了3倍多。

    视频码率:

    视频文件的大小除以是视频的时长定义为码率。

    码率和分辨率跟视频质量的关系:

    • 码率可以理解为取样率,单位时间内取样率越大,精度就越高,同时体积也越大。
    • 当视频没有经过编码时,如果分辨率越高,那么视频图像的细节越清晰。
    • 但如果视频经过编码,被限制在一定码率内,编码器就必须舍弃掉一部分细节。
    • 所以分辨率和码率都同清晰度有关。

    软解码和硬解码:

    对H264的视频解码给CPU造成了很大负担,所以手机工程师把这部分工作交给了更善于进行处理简单工作但是数据量较大的GPU。

    • GPU解码就是所谓的硬解码
    • CPU解码就是软解码。
    • iOS提供的播放器类使用的是硬解码,所以视频播放对CPU不会有很大的压力,但是支持的播放格式比较单一,一般就是MP4、MOV、M4V这几个。

    HTTP Live Streaming

    HLS简介

    HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。
    当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。支持的视频流编码为H.264。我们在视频网站上看到的M3U8后缀的播放链接就是使用HLS协议的视频。

    HLS优点
    • 1、看完一段缓存一段,防止只看一段视频但是把整个视频文件都缓存下来的用户,减少服务器压力和节省流量。
    • 2、根据用户网速切换不同的码率,兼顾流程性和清晰度。
    HLS支持情况
    • iOS 3.0及之后的版本
    • Android 3.0及之后的版本
    • HTML5。

    终端播放格式的选取

    • Android由于3.0之后才支持HLS,所以Android2.3只能用MP4。
    • Android3.0及之后支持HLS。可以用m3u8、mp4格式
    • iOS支持HLS,但不支持flash。可以用m3u8、mp4格式
    • 支持HTML5的浏览器 可以用m3u8。
    • 不支持HTML5的浏览器只能用flash播放swf。

    由于以上原因,目前无法实现一个播放地址在所有的平台都通用。

    iOS视频播放:

    iOS提供MPMoviePlayerController类进行播放,支持流媒体和文件播放。视频内容会渲染到他的View上,可以放在你想放的任何地方,用起来比较方便。这个类设计上不合理的是视频播放状态和视频加载状态都是通过Notification通知的,而不是通过block或者delegate。

    iOS视频录制:

    同拍照一样视频录制功能有两种实现方式

    • 1、UIImagePickerViewController
    • 2、AVFoundation。

    这里只讨论AVFoundation框架,这个框架是苹果提供的底层多媒体框架,用于音视频采集、音视频解码、视频编辑等,多媒体基本上都依赖AVFoundation框架。

    视频录制和拍照需要做的工作差不多,主要有以下5步:

    • 1、创建会话AVCaptureSession,用于控制input到output的流向。
    • 2、获取设备AVCaptureDevice,摄像头用于视频采集,话筒用于音频采集。
    • 3、创建输入设备AVCaptureDeviceInput,将设备绑定到input口中,并添加到session上
    • 4、创建输出AVCaptureOutput,可以输出到文件和屏幕上。 AVCaptureMovieFileOutput 输出一个电影文件 AVCaptureVideoDataOutput 输出处理视频帧,用于显示正在录制的视频 AVCaptureAudioDataOutput 输出音频数据
    • 5、音视频合成到一个文件中

    iOS对视频实时处理:

    如果需要对视频进行实时处理(当然需要否则看不到正在录制的内容),则需要直接对相机缓冲区(camera buffer)中的视频流进行处理。

    • 1、定义一个视频数据输出(AVCaptureVideoDataOutput), 并将其添加到session上。
    • 2、设置接受的controller作为视频数据输出缓冲区(sample buffer)的代理。
    • 3、实现代理方法
      -(void)captureOutput:(AVCaptureOutput )captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection )connection
      当数据缓冲区(data buffer)一有数据时,AVFoundation就调用该方法。在该代理方法中,我们可以获取视频帧、处理视频帧、显示视频帧。实时滤镜就是在这里进行处理的。在这个方法中将缓冲区中的视频数据(就是帧图片)输出到要显示的layer上。
    展开全文
  • 目前官方的帮助文档都是基于swift语言的,目前来说iOS开发还是有大量的程:序是objective-c的,所以还是应该从objective-c开始入门比较合适。 《马上着手开发 iOS 应用程序》下载; 其中的实例程序源...

    目前官方的帮助文档都是基于swift语言的,目前来说iOS开发还是有大量的程:序是objective-c的,所以还是应该从objective-c开始入门比较合适。



    《马上着手开发 iOS 应用程序》下载;


    其中的实例程序源代码:下载






    展开全文
  • 这段时间对视频开发进行了一些了解,在这里和大家分享一下我... 要了解iOS视频开发,首先我们从系统自带的播放器说起,一、我们可以直接播放视频,看到效果,不然搞了半天还播放不了视频,会让大家失去兴趣。


    原文地址:http://bluereader.org/article/158707893


    这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助。

    一、iOS系统自带播放器

     

      要了解iOS视频开发,首先我们从系统自带的播放器说起,一、我们可以直接播放视频,看到效果,不然搞了半天还播放不了视频,会让大家失去兴趣。二、其实对于很多需求来说,系统的播放器就能够胜任。简单介绍下

    1.MPMoviePlayerController

    在iOS中播放视频可以使用MPMoviePlayerController类来完成,具备一般的播放器控制功能,例如播放、暂停、停止等。但是MPMediaPlayerController自身并不是一个完整的视图控制器,如果要在UI中展示视频需要将view属性添加到界面中

    2.MPMoviePlayerViewController

    MPMoviePlayerController继承于UIViewController,默认是全屏模式展示、弹出后自动播放、作为模态窗口展示时如果点击“Done”按钮会自动退出模态窗口等

    3.AVPlayer

    MPMoviePlayerController足够强大和复。自定义播放器的样式,使用MPMoviePlayerController就不合适了,只能用AVPlayer.

    AVPlayer本身并不能显示视频,而且它也不像MPMoviePlayerController有一个view属性。如果AVPlayer要显示必须创建一个播放器层AVPlayerLayer用于展示,播放器层继承于CALayer,有了AVPlayerLayer之添加到控制器视图的layer中即可。

    4.AVFoundation

    深入学习音视频播放,需要对AVFoundation框架进行深入学习

     

    但是无论是MPMoviePlayerController还是AVPlayer支持的视频编码格式很有限:H.264、MPEG-4,扩展名(压缩格式):.mp4、.mov、.m4v、.m2v、.3gp、.3g2等。

     

    二、使用第三方Kxmovie

     

    1.配置Kxmovie

    git clone https://github.com/kolyvan/kxmovie.git 

    cd kxmovie

    git submodule update --init 

    sudo rake //会出现错误,见错误1

     

    2.遇到的问题及解决办法:

      a.执行sudo rake 时abort

    在kxmovie目录下 

    执行vim Rakefile 

    找到SDK_VERSION、XCODE_PATH两行,改为下面 

    SDK_VERSION='9.2' 

    XCODE_PATH='/Applications/Xcode.app/Contents/Developer/Platforms' 

     

    解释:SDK_VERSION=‘9.2’中9.2是你现在的sdk版本可以执行 

    cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/developer/SDKs/

    去查看目前的sdk的版本,改为对应的版本

     

    b.Undefined symbols for architecture x86_64

    Kxmovie应该是不支持64为模拟器上运行,不可以在iPhone5s以上模拟器上运行。可以在5上运行

     

    三、视频基础知识介绍

     

      1.视频播放器原理

    • 通过流媒体协议如RTSP+RTP、HTTP、MMS等下载的数据通过解协议获得封装格式数据,何为封装格式的数据。如AVI、MP4、FLV等;
    • 对于封装格式的数据进行解封装,提取视频流、音频流、字幕流进行分离待下一步准备处理,
    • 分离后获得音视频文件编码文件(音视频文件过大需要进行压缩进行传输,即编码),常见的编码如H.264编码的视频码流和AAC编码的音频码流。压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
    • 视音频同步,视频流、音频流、字幕流等进行同步播放。

    2.流媒体传输协议

      一般点播采用HTTP ,而直播的话,大部分还是采用RTMP或者私有协议,原因是延时会比较小,RTMP本身也是为了直播设计的

    • RSVP:资源预留协议
    • RTP:实时传输协议
    • RTCP:实时传输控制协议
    • MMS:微软流媒体服务协议
    • RTSP:实时流传输协议
    • MIME:多目因特网电子邮件扩展协议
    • RTMP(RTMPE/RTMPS/RTMPT):Adobe实时消息协议簇
    • RTMFP:Adobe实施消息流协议(P2P协议)
    • HLS(Http Live Streaming)

    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 

    视频流传输协议RTP/RTCP/RTSP/HTTP的区别 http://blog.csdn.net/yangxt/article/details/7467457

    3.封装格式

    封装格式(也叫容器)主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。

    常见格式

    AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定比特率编码的声音文件。

    FLV:针对于h.263家族的格式。

    MKV:万能封装器,有良好的兼容和跨平台性、纠错性,可带 外挂字幕。

    MOV:MOV是Quicktime封装。

    MP4:主要应用于mpeg4的封装 。

    RM/RMVB:Real Video,由RealNetworks开发的应用于rmvb和rm 。

    TS/PS:PS封装只能在HDDVD原版。

    WMV:微软推出的,作为市场竞争。

    4.编码标准

    视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。

     

    视频编码标准汇总及比较 http://blog.csdn.net/leixiaohua1020/article/details/12031631

    视音频编解码技术零基础学习方法 http://blog.csdn.net/leixiaohua1020/article/details/18893769

    5.播放方式

    视频直播,是对视频源的实时的观看,不能快进等操作,注重实时性,对网络延迟要求比较高,相当于视频的广播

    视频点播,是对以往的视频源进行回放,可以执行快进后退等操作

    6.FFmpeg

    http://ffmpeg.org/doxygen/2.8/examples.html 官网介绍 

    http://blog.csdn.net/leixiaohua1020/article/details/44084321 博客地址 

    http://blog.csdn.net/beitiandijun/article/details/8280448  FFmpeg的基本概念

    多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

    FFmpeg的基本概念:

    容器(container):就是文件格式,在FFMPEG中,用来抽象文件格式的容器就是AVFormatContext; 

    数据流(stream):数据流就是我们平时看到的多媒体数据流,它包含几种基本的数据流,包括:视频流、音频流、字幕流;按照我的理解,数据流在FFMPEG中的抽象为AVStream。 

    解复用器或者说分流器(demuxer):FFMPEG将要处理的多媒体文件看成多媒体数据流,先把多媒体数据流放入容器(AVFormatContext),然后将数据流送入解复用器(demuxer),demuxer在FFMPEG中的抽象为AVInputFormat,我更愿意把demuxer称为分流器,因为demuxer就是把交错的各种基本数据流识别然后分开处理,将分开的数据流分别送到视频、音频、字幕编解码器处理。

    数据包(packet)当然分开的数据流在送往编解码器处理之前,要先放于缓存中,同时添加一些附属信息例如打上时间戳,以便后面处理,那么这个缓存空间就是数据包;由于数据流是在时间轴上交错放置,所以所有的视频、音频、字幕都被分割成一段一段的数据,这些一段段的数据从数据流中解析出来之后,就是存放在各自的packet,那么在这里要说明一下,单纯的视频数据包来说,一个视频数据包可以存放一个视频帧,对于单纯的音频帧来说,如果抽样率(sample-rate)是固定不变的,一个音频数据包可以存放几个音频帧,若是抽样率是可变的,则一个数据包就只能存放一个音频帧。

     

    四、Kxmovie源码分析简易分析

     

    整体思路是KxMovieDecoder通过视频文件或者网络地址使用FFmpeg解码,将视频文件解码为YUV或者RGB文件(图像文件)。然后KxMovieGLView呈现YUV或者RGB文件。KxAudioManager进行播放管理,例如paly,pause等,KxMovieViewController使用以上API,构建播放器界面

     1.KxMovieDecoder文件 

    KxMovieDecoder提供解码的API,在vedio解码为YUV或者RGB文件。

    从公共API入手,进行分析。以下分析只是提取了vedio的操作。

    a.打开文件,进行如下操作

     + (id) movieDecoderWithContentPath: (NSString *) path  error: (NSError **) perror

    1. 打开网络流的话,前面要加上函数avformat_network_init()。
    2. AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。AVFormatContext初始化方法avformat_alloc_context()
    3. 打开输入流,四个参数分别是ps:AVFormatContext对象的地址,filename:输入流的文件名,fmt:如果非空,这个参数强制一个特定的输入格式。否则自动适应格式。int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
    4. 读取数据包获取流媒体文件的信息,每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据。int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
    5. 找到合适的解码器,
    6. AVCodecContext *codecCtx = _formatCtx->streams[videoStream]->codec;AVCodec *codec = avcodec_find_decoder(codecCtx->codec_id);
    7. Initialize the AVCodecContext to use the given AVCodec.  return zero on success, a negative value on error avcodec_open2(codecCtx, codec, NULL);

    b. - (BOOL) openFile: (NSString *) path error: (NSError **) perror;

    与方法a相比,方法a只是比此方法多了初始化方法 KxMovieDecoder *mp = [[KxMovieDecoder alloc] init]; 

    c. - (void)closeFile; 

    结束

     av_frame_free(&pFrame);

        avcodec_close(pCodecCtx); 

        avformat_close_input(&pFormatCtx);

    d. - (BOOL) setupVideoFrameFormat: (KxVideoFrameFormat) format; 

    枚举设置为 KxVideoFrameFormatRGB或者KxVideoFrameFormatYUV, 

    e.- (NSArray *) decodeFrames: (CGFloat) minDuration;

    通过AVFormatContext对象读取frames。需要方法a的操作做铺垫。

    1. 从 AVFormatContext读取下一个AVPacket。int av_read_frame (AVFormatContext *sAVPacket *pkt)
    2. 解码从AVPacket *avpkt转化为AVFrame *picture。。int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr,  const AVPacket *avpkt);   
    3. 帧速控制attribute_deprecated int avpicture_deinterlace (AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height)      
    4. 返回frames的数组。

    2.KxAudioManager

    播放管理,例如paly,pause等,

    3.KxMovieGLView

    KxMovieDecoder提供解码的API,在vedio解码为YUV或者RGB文件。KxMovieGLView利用OpenGLES(绘图技术)呈现YUV文件。

    4.KxMovieViewController

    使用以上API,构建播放器界面

     

    五、总结

     

    我的学习步骤

    1.先学会使用系统的播放器进行视频播放

    2.学会使用第三方Kxmovie

    学会这两个,可以应付基本的视频开发

    3.深入学习AVFoundation框架 我买的这本书 AV Foundation开发秘籍:实践掌握iOS & OS X 应用的视听处理技术  我还没看完

    4.需要深入的话,需要多FFmpeg框架。当然需要先学习音视频开发的基础如RGB、YUV像素数据处理、PCM音频采样数据处理、H.264视频码流解析等等。好多啊。

     

    六、参考资料汇总———也是我自己总结的大家深入学习的一些资料吧

     

    HTTP Live Streaming直播(iOS直播)技术分析与实现:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html

    HTT Live Streaming官方文档:https://developer.apple.com/streaming/ 

    FFmpeg深入分析之零-基础  http://blog.chinaunix.net/uid-26611383-id-3976154.html

    一篇大学论文,很长但是能让小白了解iOS流媒体都需要什么 http://www.doc88.com/p-7098896030363.html 

    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 

    视频流传输协议RTP/RTCP/RTSP/HTTP的区别 http://blog.csdn.net/yangxt/article/details/7467457

    ffmpeg框架解读 http://blog.csdn.net/allen_young_yang/article/details/6576303 

    流媒体博客  http://blog.csdn.net/leixiaohua1020/article/details/15811977 

    http://blog.csdn.net/beitiandijun/article/details/8280448  FFmpeg的基本概念

    视频编码标准汇总及比较 http://blog.csdn.net/leixiaohua1020/article/details/12031631

    视音频编解码技术零基础学习方法 http://blog.csdn.net/leixiaohua1020/article/details/18893769

     

    书籍:AV Foundation开发秘籍:实践掌握iOS & OS X 应用的视听处理技术 

     

    七、水平有限,作者也是刚开始学习,肯定有很多不正确的地方,希望大家指正,谢谢。

    展开全文
  • iOS 用其他应用程序打开文件功能如何实现的  如下图,这个功能如何实现的,求高手指教,谢谢了。 回复引用 举报顶端 ...

    iOS 用其他应用程序打开文件功能如何实现的   

    如下图,这个功能如何实现的,求高手指教,谢谢了。



    级别: 新手上路
    状态: 未签到 - [2天]
    UID: 230075
    精华: 0 
    发帖: 7
    可可豆: 30 CB
    威望: 35 点
    在线时间: 132(时)
    注册时间: 2013-06-28
    最后登录: 2017-06-12
    沙发 :发表于: 2014-09-25 10:34   发自: Web Page

     NSString *cachePath =文件路径


        


       UIDocumentInteractionController *documentController =



        [UIDocumentInteractionController


         interactionControllerWithURL:[NSURL fileURLWithPath:cachePath]];


        documentController.delegate = self;


        


        [documentController presentOpenInMenuFromRect:CGRectZero


                                               inView:self.view


                                             animated:YES];


    -(void)documentInteractionController:(UIDocumentInteractionController *)controller


           willBeginSendingToApplication:(NSString *)application


    {



    }



    -(void)documentInteractionController:(UIDocumentInteractionController *)controller


              didEndSendingToApplication:(NSString *)application


    {


        


    }



    -(void)documentInteractionControllerDidDismissOpenInMenu:


    (UIDocumentInteractionController *)controller


    {


        


    }



    级别: 侠客
    状态: 未签到 - [7天]
    UID: 238720
    精华: 0 
    发帖: 69
    可可豆: 242 CB
    威望: 245 点
    在线时间: 418(时)
    注册时间: 2013-08-21
    最后登录: 2017-04-20
    板凳 :发表于: 2014-09-25 11:00   发自: Web Page
    谢谢,找了很久都没找到,原来是Document Interaction Programming Topics for iOS这个里面的啊 
    级别: 新手上路
    状态: 未签到 - [2天]
    UID: 230075
    精华: 0 
    发帖: 7
    可可豆: 30 CB
    威望: 35 点
    在线时间: 132(时)
    注册时间: 2013-06-28
    最后登录: 2017-06-12
    3 楼: 发表于: 2014-09-25 11:04   发自: Web Page
    是的 不过只支持ios7以上的 你的应用要是支持ios7.0以下的的需要判断下 ios7以下是没有这个功能的 
    级别: 侠客
    状态: 未签到 - [7天]
    UID: 238720
    精华: 0 
    发帖: 69
    可可豆: 242 CB
    威望: 245 点
    在线时间: 418(时)
    注册时间: 2013-08-21
    最后登录: 2017-04-20
    4 楼: 发表于: 2014-09-25 16:31   发自: Web Page
    你好,你知道怎么设置自己的app支持的文件类型吗,官方文档说明不是太明白啊。 
    级别: 新手上路
    状态: 未签到 - [2天]
    UID: 230075
    精华: 0 
    发帖: 7
    可可豆: 30 CB
    威望: 35 点
    在线时间: 132(时)
    注册时间: 2013-06-28
    最后登录: 2017-06-12
    5 楼: 发表于: 2014-09-25 16:36   发自: Web Page
    这个我们都是判断文件后缀的 .mp3 .txt .doc等的 排除不支持的 类似qq那种的 用户可以选择直接打开(webVIew) 第三方打开就是上面代码那种 或者safari打开 
    级别: 新手上路
    状态: 未签到 - [24天]
    UID: 270010
    精华: 0 
    发帖: 14
    可可豆: 220 CB
    威望: 127 点
    在线时间: 111(时)
    注册时间: 2013-11-05
    最后登录: 2017-04-25
    6 楼: 发表于: 2014-10-13 14:35   发自: Web Page
    好! 
    级别: 新手上路
    UID: 288981
    精华: 0 
    发帖: 8
    可可豆: 27 CB
    威望: 17 点
    在线时间: 387(时)
    注册时间: 2014-01-20
    最后登录: 2016-08-30
    7 楼: 发表于: 2015-01-06 16:37   发自: Web Page
    请问楼主~ 怎样设置才能让自己的程序显示在那些选项中呢? 
    级别: 侠客
    状态: 未签到 - [7天]
    UID: 238720
    精华: 0 
    发帖: 69
    可可豆: 242 CB
    威望: 245 点
    在线时间: 418(时)
    注册时间: 2013-08-21
    最后登录: 2017-04-20
    8 楼: 发表于: 2015-01-07 09:30   发自: Web Page
    回 7楼(huai333520) 的帖子
    <key>CFBundleDocumentTypes</key>
        <array>
            <dict>
                <key>CFBundleTypeName</key>
                <string>com.myapp.common-data</string>
                <key>LSItemContentTypes</key>
                <array>
                    <string>com.microsoft.powerpoint.ppt</string>
                    <string>public.item</string>
                    <string>com.microsoft.word.doc</string>
                    <string>com.adobe.pdf</string>
                    <string>com.microsoft.excel.xls</string>
                    <string>public.image</string>
                    <string>public.content</string>
                    <string>public.composite-content</string>
                    <string>public.archive</string>
                    <string>public.audio</string>
                    <string>public.movie</string>
                    <string>public.text</string>
                    <string>public.data</string>
                </array>
            </dict>
        </array>
    我是抄的360里面的,写到info里面就可以了,其他程序使用第三方打开的时候就能看到你的程序了。 
    展开全文
  • 此外、面向对象、结构体、类Class,以及手动内存管理、自动内存管理、协议与抽象类型、错误处理、iOS开发中的常见概念、Xcode操作、多媒体编程、网络编程、数据解析和加密、Sqlite数据库、多线程编程、内购等实用...
  • 只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发
  • 一、音频播放方式 1.System Sound Services 2.AVAudioPlayer 3.Audio Queue Service 4.OpenAL 二、使用 1.System Sound Services的使用 SystemSoundID soundId;...NSString *soundFile = [[NSBundl

    一、音频播放方式

    1.System Sound Services

    2.AVAudioPlayer

    3.Audio Queue Service

    4.OpenAL

    二、使用

    1.System Sound Services的使用

    SystemSoundID soundId;   

     //后面将使用soundId引用音频文件

    NSString *soundFile = [[NSBundle mainBundle]pathForResource:@"XXX" ofType:@"wav"];  

     //通过NSBundle的mainBundle方法返回一个NSBundle对象,该对象对应当 前应用程序可执行二进制文件所属目录。pathForResource方法回去aaa.wav的真实路径

    AudioServicesCreateSystemSoundID( (__bridge CFURLRef ) [ NSURL fileURLWithPath:soundFile ] .&soundId ) ;

    //创建soundFile的SystemSoundID,

    // (__bridge CFURLRef ) 是强制转换成CFURLRef对象,因为此处理讲一个C语言结构转换我一个OC对象,所以必须加上__bridge 

    AudioServicesPlaySystemSound(soundId);

    //播放音频 System Sound Services  不能播放超过30s的声音,并且支持wav

    2.AVAudioPlayer的使用

    (1)AVAudioPlayer类的一个实例,被称为一个音频播放器,从文件或者内存中提供音频播放数据

    (2)Apple 推荐使用这个类来实现音频播放,除非你播放网络音频流或者要求费城地的I/O延迟

    (3)AVAudioPlayer 的功能

    A.播放任意时间的音频

    B.播放声音文件或内存缓存区

    C.循环播放

    D.播放多个声音,一个播放器一个声音,精确同步

    E.控制每一个正在播放声音的playback level,stereo positioning,and playback rate;

    F.搜索音频文件的特定性,支持快进快退功能

    G.使用播放计量来获取数据

    (4)AVAudioPlayer的事件处理

    A. Responding to Sound Playback Completion

    - audioPlayerDidFinishPlaying:successfully;

    B.Responding to an Audio Decoding Error

    - audioPlayerDecodeErrorDidOccur:error;

    C.Handling Audio Interruptions

    - audioPlayerBeginInterruption;

    - audioPlayerEndInterruption:withOptions;

    - audioPlayerEndInterruption: (Deprecated in iOS 6.0)

    - audioPlayerEndInterruption:withFlags:(Deprecated in iOS 6.0)

         (5)  AVAudioPlayer 的使用

    NSError *error;

    AVAudioPlayer _backgroundMusicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:backgroundMusicURL error:&error];

    [_backgroundMusicPlayer prepareToPlay];

    [_backgroundMusicPlayer play];

    (6)AVAudioPlayer 的属性特征

    A. playing: 一个Bool值,表示是否是一个正在播放的播放器

    B. volume:音频播放器增益,数值从0.0 ~ 1.0

    C. pan: 音频播放器的立体声位置(左右声道),数值-1.0 ~ 1.0

    D. rate: 音频播放的播放率,默认数值为1.0

    E. enableRate:一个Bool值,制定是否启用音频播放器的播放速度调整

    F. numberOfLoops:音频重复播放次数

    3.Audio Queue Service的使用

    (1)音频队列是一个用于音频录制或者播放的软件对象,一个音频队列做的工作:

    A.链接到音频硬件

    B.管理内存

    C.如需要时使用编解码器来压缩音频格式

    D.调停播放或录音

    (2)基本工作原理

    A. 音频队列的架构

    所有音频队列具有相同的结构,由这些部分组成:

    a. 一组音频队列缓存区,每一个是这些音频数据的临时存储区

    b. 缓存区队列,有序列表的音频队列缓存区

    c. 音频队列的回调函数

    B.记录进程:

    a. 将视频填入第一个缓冲器中

    b. 当队列中的第一个缓冲器填满时,会自动填充下一个缓冲器,此时,会触发回调

    c. 在回调函数中需要将音频数据流写入磁盘

    d. 然后,需要在回调函数中将该缓冲器中重新放入缓冲队列,以便重复使用该缓冲器,重复步骤2

    播放进程:

    a. 将音频读入到缓存器中,一旦填充满一个缓存器,就会进入缓存队列,此时处于待命状态

    b. 应用程序命令发出指令,要求音频队列开始播放

    c. 音频蛔虫第一个缓存其中读取数据,并开始播放

    d. 一旦播放完成,就会触发回调,并开始播放下一个缓存器中的内容

    e. 回调中需要给该缓存器读取后面的音频数据,然后重新放入缓存队列中,重复步骤3

    4. OpenAL的使用

    (1)OpenAL是一个跨平台(包括iphone OS)的音频API,被推荐用于音频游戏中,并且也非常适合许多其他类型的应用程序

    (2)OpenAL主要由3个实体构成:听众Listener ,声援Source,以及缓存Buffer

    A. 听众Listener:就是你,Listener的位置是可以移动的。

    B. 声援Source:类似一个话筒,他发出声音给听众听,和Listener一样,声源的位置是可以移动的,

    C. 缓存Buffer:存着原始声音数据,就是你需要播放的声音。

    还有2个重要的对象,设备device 和环境context

    A. 设备是播放声音的硬件

    B. 环境是声源和听众所在的空间

    (3)OpenAL的使用

    让OpenAL工作所需的最少步骤是:

    A. 得到设备信息

    B. 将环境与设备关联

    C. 在缓存中加入声音数据

    D. 在声源中加入缓存数据

    E. 播放声源


    三、视频开发

    iOS有数种技术可用于播放应用程序包的电影文件以及来自网络的数据流内容,如果瑟呗具有合适的视频硬件,这些技术也可用于捕捉视频,并可将捕获到的视频集成到应用程序

    系统也提供多种方法用于播放或者录制视频内容,你可以根据需要选择,选择视频技术的时候,请尽可能选择高级框架,因为高级框架可以简化为提供对某种功能的支持所需的工作,下面列出的框架由高级到低级排列。其中,媒体播放器框架提供最高级的接口

    A. UIKit 中的UIImagePickerController类提供了一个口在能支持camera的设备上记录音频的标准接口

    B. The Media Player framework 提供了一组易用于使用的借口,用于播放application中全屏或者部分屏幕视频

    C. The AV Foundation framework 提供了一组Objective-C接口,可以管理视频的录制与播放

    D. Core Media 对较高的框架使用的底层类型进行描述,同时提供对media操纵的底层接口

    iOS视频技术支持播放的视频文件应具有。mov,.mp4,.m4v以及.3gp文件扩展名,而且文件应使用下属压缩标准:

    H.264视频,多达1.5Mbps,640*480像素,每秒30帧。H.264Baseline Profile 的Low-Complexity版本支持AAC-LC音频(.m4v,.买mp4以及.mov文件格式中高达160Kbps,48KHz的立体音频)

    H.264视频,高达68Kbps,320*240像素,每秒30帧,达到Level1.3的BaseLine Profile支持AAC-1_C音频(.m4v、.mp4以及.mov)

    MPEG-4视频,高达2.5Mbps,640*480像素,每秒30帧,Simple Profile支持ACC-LC音频(.m4v、.mp4以及.mov文件格式中高达160Kbps,48KHz的立体音频)

    各种音频格式,包括“音频技术”列出的清单


    1.Media Player framework

    Media Player framework提供了用于播放视频、阴影、博客和音频书文件的工具

    此框架的MPMoviePlayerController和MPTimedMetadata类让你播放流媒体视频内容和包含在流的响应时间的元数据

    (1) MPMoviePlayerController

    一个电影播放器(MPMoviePlayerController类型)管理从文件或网络流播放的电影,发生电影播放器和拥有播放器 视图无论是全屏或内联播放。你可以在你的app所拥有的视图层次结构中加入电影播放器,或者使用MPMoviePlayerView Controller对象管理

    当加入一个播放器到你的app中时,应该是这样的

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:myURL];

    [player prepareToPlay];

    [player.view setFrame:myView.bounds]; //player's frame must match parent's

    [myView addSubview:player.view];

    // something to do ...

    [player play];

    Movie Notifications:

    A. MPMovieDurationAvailableNotification: 当电影时间已经确定时post

    B. MPMovieMediaTypesAvailableNotification: 当media类型确定时post

    C. MPMoviePlayerContentPreloadDidFinishNotification:当movie在内存中准备播放时post

    D. MPMoviePlayerWillEnterFullscreenNotification:将进入全屏模式post

    E. MPMoviePlayerDidEnterFullscreenNotification:进入全屏模式时post

    F. MPMoviePlayerWillExitFullscreenNotification:将退出全屏模式时post

    G. MPMoviePlayerDidExitFullscreenNotification:退出全屏模式时post

    H. MPMoviePlayerLoadStateDidChangeNotification:当播放器忘了缓存status改变时post

    I. MPMoviePlayerNowPlayingMovieDidChangeNotification:切换视频时post

    J. MPMoviePlayerPlaybackDidFinishNotification:视频播放完成时post

    K. MPMoviePlayerPlaybackStateDidChangeNotification:视频播放状态改变时post

    L. MPMoviePlayerReadyForDisplayDidChangeNotification:视频准备播放状态改变post


    (2)AV Foundation framework

    A. AV Foundation 提供了一个基于时间试听数据水平的Objective-C接口,具有播放、录制、编辑、转换、捕捉等功能

    B. AV Foundation 使用AVAsset 代表一个抽象的媒体,包含标题文件大小等,不关联任何格式

    a. 对要合成和编辑媒体就会打开多个音频和视频文件,为每个打开的音频和视频取个抽象名叫轨道track

    b. 请注意,建立了AVASset不意味着他就可以使用了,他要进行一些计算,会阻塞当前线程,为了避免足协要求童工 多线程调用block来处理

    C. AVFoundation 容许你管理多个playback,为了支持这一点,它把一组表述状态从 asset 中分离出来,这样你就可以同 时播放几个内容,为了管理多个播放提供了一个play item 对象,对应轨道提供有player item trak 对象,要播放play item同 player对象

    D. player item 用来管理AVAsset的播放,play item track 用来管理track的播放

    (3)Core Media

    CoreMedia框架提供了一个底层的接口,管理和播放试听媒体在你的application中




     






















    展开全文
  • 视频教程拥有180节课程,包含iOS开发的方方面面:iOS开发基础理论知识、 视图、视图控制器、多媒体、数据处理、常用插件、信用卡卡号识别、自动化测试、网络访问、多线程、ShareSDK社会化分享、CoreImage、...
  • AnyChat手机视频开发包是面向集成或软件开发商使用,用于开展手机视频相关的产品开发和系统集成。 开发包提供手机端音视频采集、编码、压缩、音视频传输等功能;通过与后端服务器对接,优先P2P通讯,实现手机视频即...
  • 最近,在做一款基于iOS平台的视频监控app的维护,无文档无注释,整天被安排解BUG加功能做优化,其实个人觉得当务之急是精简app功能,重新构建app架构!当然这是长远之计,如果只是暂时糊弄一下客户,赚点钱了事,...
  • 需要iOS开发视频资料可以加我微信: 1914532832 验证信息请注明:IOS开发  上节介绍了纯代码开发,就是所有页面全部用代码来写,纯代码开发缺点就是比较慢的,而且很不直观,需要在App运行后才能看到页面效果。这节...
  • 转自:... 闲着也是闲着. 给大家分享个IOS开发视频教程 Objective-c视频程下载 需要迅雷高速下载的给力回复下. iPhone开发视频教程-Objective-C语言教程-第1讲-基本语法 http://
  • iOS开发视频教程下载 全网第一个免费的 iOS开发视频教程下载 。千锋网独家出品。欢迎大家下载学习 网盘下载: iOS学习视频教程-第01讲-iOS历史介绍  iOS学习视频教程-第02讲-XCode安装  iOS学习视频教程-...
  • 在最近的项目中,设计到视频上传,在网上找了下资料,这里整理下来希望对大家有帮助,这里简短谈下整个流程; 1. 创建保存该视频的文件夹 - (void)createVideoFolderIfNotExist {  NSArray *paths = ...
  • swift入门教程面向单位实际需求,资深讲师,提供实用swift课程,swift案例教学,从swift基础到项目实战,解决工作中实际问题,ios开发入门必选课程,全面学习Swift编程语言的技术体系,通过大量案例掌握Swift在项目开发中的...
  • (一)iOS的系统架构 iOS基于UNIX系统,iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch ...(1)触摸层:为应用程序开发提供了各种常用的框架并且大部分框架与界面有关,本质上来说它负责用户在iOS设...
  • HTTP Live Streaming (HLS))是向播放应用提供媒体的理想方式。使用HLS,您可以以不同的...本章介绍如何在播放应用中利用HLS的独特功能。 从iOS 10开始,您可以使用AVFoundation将HTTP Live Streaming资源下载到iO...
  • 本书是我们智捷iOS课堂团队编写iOS系列丛书中的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的...
1 2 3 4 5 ... 20
收藏数 48,188
精华内容 19,275