38.FFmpeg学习笔记 - ffplay移植到iOS

本文介绍了将ffplay 4.1版本移植到iOS平台的过程,使用OpenGL播放视频,AudioUnit播放音频,替代SDL库。项目中遇到并解决了多线程调试问题、真机播放异常及播放结束时的滋滋声问题。源代码已上传至GitHub。
摘要由CSDN通过智能技术生成

用了几天的时间,将ffplay(4.1版本)移植到了iOS平台,并保留了绝大部分功能。

ffplay播放视频和音频用的是SDL库提供的功能,本项目用OpenGL播放视频,用AudioUnit播放音频,可以参考前面的两篇文章:

32.FFmpeg学习笔记 - iOS上播放PCM

10.OpenGL学习笔记 - 在iOS上播放YUV

为了方便,播放视频时只支持YUV420P格式,否则需要进行转换,音频统一转换成2声道、44100采样率、位深16格式。

ffplay多线程操作时用到的锁和信号量是SDL库提供的功能,本项目中用iOS上的NSCondition类替换,NSCondition同时提供了锁和信号量相关操作,SDL_mutex和SDL_cond可以统一用NSCondition替换。

ffplay开辟线程用的也是SDL库提供的功能,本项目中用iOS上的NSThread类替换。

处理事件(键盘/鼠标),ffplay用的是SDL提供的功能,本项目中用iOS上按钮的点击事件代替,只保留了其中的一些事件,包括暂停/继续、退出、逐帧播放、快进、快退、切换音视频流。

过程中遇到的难题:

1.由于引入多线程,稍有不慎,就出错,非常不容易调试:

static int decoder_start(Decoder *d, int (*fn)(void *), void *arg)
{
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值