ios直播技术(3)-- 视频解码

本文介绍了iOS平台上的视频解码技术,包括硬解码(使用videotoolbox)和软解码(使用ffmpeg)。硬解码因其低CPU消耗和高效率而优先选用,适用于iOS 8.0及以上系统,而软解码则在8.0以下系统中使用,适合720P以下分辨率。文章提供了解码器设计图,并给出了软解码的实现源码链接。
摘要由CSDN通过智能技术生成

今天给大家分享下视频的解码,解码器分为硬解码(videotoolbox)和软解码(ffmpeg)实现。

硬解码由于耗用CPU极低,解码效率高所以优先选择,软解码占用CPU高,只在8.0以下使用,推荐720P以下分辨率,当然也有优点,6.x、7.x系统都可用。


首先是解码器的设计图:


和上一篇文章中的编码器一样,H264Decoder作为基类首先是创建解码器接口,当8.0以上系统 选择硬解码 其他软解码

+ (id)create
{
    if (Version_iOS_8) {
        H264VideoToolboxDecoder *decoder = [[H264VideoToolboxDecoder alloc] init];
        return decoder;
    }
    else
    {
        H264Decoderlmpl *decoder = [[H264Decoderlmpl alloc] init];
        return decoder;
    }
}
构造的时候和编码器又有区别,在解码的时候创建了自己独立的线程,在dealloc的时候在去停止线程

- (void)startThread
{
    _signal         = [[NSCondition alloc] init];
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(Threadfunc) object:nil];
    _thread = thread;
    [_thread setName:@"videoDecoderThread"];
    [_thread start];
}
- (void)stopThread
{
    [_signal lock];
    [_signal signal];
    [_signal unlock];
    _signal =nil;

    if (_thread)
        [_thread cancel];
    _thread = nil;
    return 0;
}
当从网络收到视频数据时,调用decoder的decode方法,将数据放到解码队列中并通过信号通知解码线程,这里也做了一些处理例如第一个关键帧前面的数据全部丢弃,当收到关键帧时发现解码队列还有数据那么直接清空队列,解码最新的数据。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值