LinuxC/C++编程基础(17) 视频关键帧长度和宽度的解析

本文介绍了在Linux环境下,通过C/C++解析视频关键帧以获取视频原始长度和宽度的方法,避免播放时出现失真或不必要的问题。文章详细展示了sps-parse.cpp的实现,包括关键函数exp_golomb_ue和exp_golomb_se,以及如何从文件中读取数据并解析出视频的宽度和高度。
摘要由CSDN通过智能技术生成

一.问题描述,如下:

在视频开发时,在视频播放之前,通常得确定该视频的原始长度和宽度,以这样的长度和宽度,才能得到最佳的视觉效果。

否则,长度或者宽度过大,就会造成失真,过小,则显然不必要。而视频的长度和宽度通常是通过相关算法变换后,存储

于视频的关键帧,因此,需要把它们解析出来,如下图给出了一些视频帧的数据:




比如,在网页YY的开发中,http://yy.com/#31499/81208043,其中的视频播放效果如下:


其中那美女的视频的长度和宽度,就需要解析出来,否则影响播放效果


转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8260199

二.视频关键帧的解析,即sps-parse.cpp的实现,如下:

#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>

typedef uint8_t byte, uint8, uint8_bitmask;
typedef uint16_t uint16, uint16_be, uint16_le;
typedef int16_t sint16, sint16_be, sint16_le;
typedef uint32_t uint32, uint32_be, uint32_le;
typedef int32_t sint32, sint32_be, sint32_le;
typedef struct __uint24 {
    uint8 b[3];
} uint24, uint24_be, uint24_le;
typedef struct __bit_buffer {
    byte * start;
    size_t size;
    byte * current;
    uint8 read_bits;
} bit_buffer;
static void skip_bits(bit_buffer * b

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值