Tag: ffmpeg

使用FFMPEG和VideoToolbox在iOS上加速H264解码

在LIVEOP,我们致力于以简洁的方式为急救人员提供最相关的信息,同时又不影响我们的无缝用户体验。 当我们与全球领先的无线(随身)摄像头系统提供商Zepcam合作时,我们希望确保我们提供的体验符合我们的高标准,而不影响性能或效率。 Zepcam托管的摄像机流有几种不同的格式,最重要的是,HTTP Live Streaming(HLS)是iOS生态系统中的一流公民,内置了AVFoundation和RTSP(实时流协议)的内置支持。 HLS流通常用于直播电视和新闻广播。 它专注于为观看者带来无缝体验:不允许丢帧,不允许无序播放帧,并保留少量即将出现的帧缓冲区以确保流畅的播放体验。 Zepcam流被激活的情况通常会危及生命。 警员可能在试图装防暴动时从佩戴在身上的摄像机进行实时直播,或者在顶部装有摄像机的梯形引擎可能会鸟瞰大建筑物的火灾,包括消防员在地面上的位置。 我们对无缝用户体验的定义与HTTP Live Streaming所规定的不同:在我们的案例中,向用户显示的帧尽可能实时是很重要的。 它们可以无序到达,并且可以丢弃几帧,只要这有利于流的实时性。 加上我们的要求,我们开始在UDP上使用RTSP。 Apple不在任何高级框架中提供对RTSP流回放的支持。 用于回放视频流的所有高级系统类MPMoviePlayerController , AVPlayerItem和AVPlayer不支持RTSP流。 幸运的是,瑞士的音频/视频处理军刀FFMPEG配备了正确的工具来处理和解码RTSP流。 FFMPEG在开源社区已有17年的历史了,自那时起,它就已经成为VLC,Google Chrome和Chromium¹等各种最终用户应用程序背后的可靠力量。 设置FFMPEG Zepcam提供的RTSP流使用H264编解码器进行编码。 为了防止最终iOS应用程序文件(.ipa)的二进制文件大量增加,我们选择从头开始编译最新版本的FFMPEG(v4.0.1),仅启用我们希望使用的那些功能。 我们使用此处找到的出色的构建脚本,并进行了一些调整: 将FF_VERSION变量更改为4.0.1 将DEPLOYMENT_TARGET更改为iOS应用程序的部署目标 更改CONFIGURE_FLAGS以启用位码,并禁用除流所需的所有功能之外的所有功能: CONFIGURE_FLAGS =“-启用交叉编译–disable-debug –disable-programs –disable-doc –extra-cflags = -fembed-bitcode –extra-cxxflags = -fembed-bitcode –disable-ffmpeg –disable-ffprobe –disable-avdevice –disable-avfilter –disable-encoders –disable-parsers –disable-decoders –disable-protocols –disable-filters –disable-muxers –disable-bsfs –disable-indevs –disable-outdevs –disable-demuxers –enable-protocol = file […]

如何获取原始的YUV420p相机数据

我不知道使用哪个值来获取原始YUV420p数据。 代码如下: AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; output.alwaysDiscardsLateVideoFrames = YES; output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey: [NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange]}; //output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey: [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]}; dispatch_queue_t queue; queue = dispatch_queue_create("CameraQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; [session addOutput:output]; 我注意到kCVPixelFormatType有一些值,有人知道哪个值是正确的获取原始YUV420p数据? kCVPixelFormatType_420YpCbCr8Planar kCVPixelFormatType_420YpCbCr8PlanarFullRange kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 可以是其中之一?

Androidvideo无法在iOS上播放

我发现使用编解码器H.264, MPEG-4 HE AAC V2video对我的代码没有任何问题。 但是当我使用编解码器H.264, AAC (从Android设备发送)video再次黑色。 现在我的问题是如何将video转换为iOS可玩的编解码器。

任何更新的http分段器的IPad / iPhonevideostream最新的ffmpeg?

我想知道是否有任何支持最新的ffmpeg库的HTTP文件分割器 ? 到目前为止,我已经find了一些项目,虽然我还没有能够使用ffmpeg 0.9编译它们 http://svn.assembla.com/svn/legend/segmenter/ http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/ 谢谢!

在iOS上使用AVCodec将原始YUV420P编码为h264

我正尝试将从CMSampleBuffer收集的单个YUV420P图像编码到AVPacket以便我可以通过RTMP在networking上发送h264video。 发布的代码示例似乎工作,因为avcodec_encode_video2返回0 (成功),但got_output也是0 ( AVPacket是空的)。 有没有人有任何经验与编码video在iOS设备上,可能知道我在做什么错了? – (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // sampleBuffer now contains an individual frame of raw video frames CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(pixelBuffer, 0); // access the data int width = CVPixelBufferGetWidth(pixelBuffer); int height = CVPixelBufferGetHeight(pixelBuffer); int bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0); unsigned char *rawPixelBase = (unsigned char *)CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, […]

FFMPEG编译的库和iOS

我已经从testing应用程序复制FFMPEG库到我的xcode项目,但尽pipe将其添加到我的项目,我无法使用它们, #include <libavcodec/avcodec.h> 甚至所有编译的库(libavcodec.a,libavutil.a,libavformat.a,libavdevice.a>都在链接库中被指定为所需的框架。

FFmpeg iosvideo​​stream的示例代码

我已经完成Video Encoding在iOS中使用AVFoundation框架。 现在我想用FFMPEG将这些videostream传输到RTMP服务器。 如果你们中的任何一个人发布链接/示例代码来实现这一点,IT将会非常有帮助。 除此之外的任何其他解决scheme也被邀请。 提前感谢你。

如何构buildFFMpeg作为iOS框架

我试图在FFMpeg上build立自己的Player基础, 我成功地将FFMpeg构build为静态库(* .a), 但是需要复制另一个头文件才能使用, 我希望它可以像框架一样使用, 但即使我将头文件添加到框架(公开设置) 我的演示应用程序无法在FFMpeg.framework中find.h文件, 有什么build议或教程可以帮助我把它作为真正的框架? 谢谢

在YUV420p上有很多GREEN Color – >在iOS上的OpenGL 2.0 Shader中使用RGB

我想使用ffmpeg和OpenGL ES 2.0为iOS制作电影播放器​​,但是我遇到了一些问题。 输出RGB图像有很多绿色。 这是代码和图像 480×320宽度和高度: 512×512纹理宽度和高度 我从ffmpeg AVFrame获得了YUV420p行数据。 for (int i = 0, nDataLen = 0; i < 3; i++) { int nShift = (i == 0) ? 0 : 1; uint8_t *pYUVData = (uint8_t *)_frame->data[i]; for (int j = 0; j < (mHeight >> nShift); j++) { memcpy(&pData->pOutBuffer[nDataLen], pYUVData, (mWidth >> nShift)); pYUVData […]

如何build立和链接FFMPEG到iOS?

所有! 我知道,关于FFMPEG在iOS上有很多的问题,但没有一个答案适合我的情况:(当我想在我的项目中链接FFMPEG时发生每种情况的奇怪事情,所以请帮助我! 我的任务是编写用于iOS的video聊天应用程序,该应用程序使用RTMP协议来发布和读取自定义Flash Media Server的videostream。 我决定使用rtmplib,免费的开源库,通过RTMPstream式传输FLVvideo,因为它是唯一合适的库。 当我开始研究它时,出现了许多问题,但是后来我明白了它应该如何工作。 现在,我可以通过我的应用程序的帮助阅读FLVvideo的实时stream(来自url),并将其发送回频道。 我现在的麻烦是在发送video从相机。 基本的操作顺序,据我所知,应该是以下几点: 使用AVFoundation,在序列(Device-AVCaptureSession-AVVideoDataOutput-> AVAssetWriter)的帮助下,我把它写到一个文件中(如果需要,我可以更详细地描述这个stream程,但在问题的上下文中并不重要)。 这个stream程对于将摄像机的实时video硬件加速转换为H.264编解码器是必要的。 但它是在MOV容器格式。 (这是完成的步骤) 我读取了每个写入样本的临时文件,并获取video数据的字节stream(在QuickTime容器中的H.264编码)。 (这是已经完成的一步) 我需要将QuickTime容器格式的video数据转换为FLV。 这一切都是实时的(逐包) 如果我将拥有包含在FLV容器格式中的video数据包,我将能够使用rtmplib通过RTMP发送数据包。 现在,对我来说最复杂的部分是第3步。 我想,我需要使用ffmpeg lib来转换(libavformat)。 我甚至find了源代码,显示了如何解码MOV文件中的h.264数据包(查看libavformat,我发现可以从字节stream中提取这个数据包,这对我来说更合适)。 完成后,我需要将数据包编码到FLV中(使用ffmpeg或手动添加FLV-headers到h.264数据包,这不是问题,如果我正确的话,很容易)。 FFMPEG具有很好的文档,是非常强大的库,我认为,使用它不会有问题。 但这里的问题是,我不能在iOS项目中工作。 我花了3天阅读文档,stackoverflow和谷歌search“如何build立FFMPEG为iOS”的问题的答案,我想,如果我将再花一个星期试图编译这个库,我的下午会烧我) 我试图使用许多不同的构build脚本和configuration文件,但是当我构buildFFMPEG,我有libavformat,libavcodec等x86架构(即使当我指定armv6构build脚本)。 (我用“lipo -info libavcodec.a”来显示体系结构) 所以我不能build立这个来源,并决定find构buildarmv7,armv6,i386的预构build的FFMPEG。 我已经从github的MidnightCoders下载iOS Comm Lib,它包含使用FFMPEG的例子,它包含avcodec,avformat和另一个FFMPEG库的预build.a文件。 我检查他们的架构: iMac-2:MediaLibiOS root# lipo -info libavformat.a Architectures in the fat file: libavformat.a are: armv6 armv7 i386 我发现这对我来说是适合的! 当我试图将这个库和头文件添加到xCode项目,它编译罚款(甚至没有任何警告,如“库为另一个架构编译”),我可以使用头结构,但是当我试图调用C从函数libavformat(av_register_all()),编译器显示错误消息“符号(s)未find架构armv7:av_register_all”。 我想,也许在lib中没有符号,并试图向他们展示: […]