1 Star 0 Fork 3

liuqingfa / 音视频编解码

forked from 才鲸 / 音视频编解码 
Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
readme.md

音视频格式简介

  1. 文件格式
  • .mkv
    一种容器和文件格式,和AVI MP4 ASF类似
    matroska官网
    协议pdf下载地址
  • .mp4
    一种容器格式,全名MPEG-4第14部分,协议ISO/IEC 14496-14:2003
    mpeg官网 (速度很慢,无法下载协议文档)
    协议pdf下载地址 注册以后即可下载,无需下载积分
  • .mp3
    一种音频编码与压缩格式,全称MPEG-1 or MPEG-2 Audio Layer III,ISO/IEC 13818-3 or ISO/IEC 11172-3
    CSDN下载地址 需要下载积分
  • .jpg/.jpeg
    JFIF格式的文件,JPEG压缩方法,协议ISO/IEC 10918-1
    协议pdf下载地址 官网免费下载
    CSDN下载地址 需要下载积分(与上面的文件一致)
  • .mjpg/.mjpeg
    格式RFC 2435
    ITU T.81 在线阅读
    下载地址见前面.jpeg
  1. 编码格式
  • mp3
    MPEG-1 or MPEG-2 Audio Layer III
    ISO/IEC 13818-3 or ISO/IEC 11172-3
    协议下载地址见前面.mp3

  • aac
    AAC由国际标准化组织及国际电工委员会标准化为MPEG-2及MPEG-4规格的一部分。
    .aac使用MPEG-2 Audio Transport Stream容器
    MPEG-2 AAC和MPEG-4 AAC
    ISO/IEC 13818-7 or ISO/IEC 14496-3 (HE-AAC/aac+)
    13818-7下载地址 需要下载积分
    14496-3下载地址 需要下载积分

  • h264
    全称MPEG-4 Part 10, Advanced Video Coding,ISO/IEC 14496-10:2004
    协议pdf下载地址 下载速度很慢,但是可以下载成功

  • mpeg2
    ISO/IEC 13818-1 音视频同步与复用 13818-1中文版下载地址 需要下载积分
    ISO/IEC 13818-2 视频
    138181~3中文版下载地址 需要一个下载积分
    13818-2英文版下载地址 需要下载积分

  • jpeg
    协议ISO/IEC 10918-1 or ITU T.81
    下载地址见前面.jpeg

  1. 开源编解码器
  • ffmpeg
    官网
    Git仓库
    WiKi
    压缩编码的视频数据输出成为非压缩的颜色数据,例如 YUV420P,RGB 等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如 PCM 数据。

  • bilibili网页播放器
    flv.js Github仓库

  • bilibili苹果安卓播放器
    ijkplayer Github仓库

  • ffserver
    ffserver wiki地址

  • ffplay
    ffplay 官网
    使用the FFmpeg libraries and the SDL library。
    MediaInfo查看媒体文件信息 官网
    源码

  1. 参考资料
    如何用ffplay播放视频
    ISO/IEC 14496-12:2015(ISO格式) 官网可免费下载
    ffplay read_thread获取文件信息流程
    ffplay avformat_open_input解封装流程
    ffplay probe探测文件格式流程
    mp4文件格式详解
    mkv文件格式详解
    ffplay 视频显示流程

  2. ffplay源码分析

    // 获取文件封装格式
    main() --> stream_open() --> read_thread() --> avformat_open_input() --> init_input()
    --> av_probe_input_buffer2() --> av_probe_input_format2() --> av_probe_input_format3()
    --> for(){ score = fmt1->read_probe() } // 选出封装格式,如mp4、mkv // AVInputFormat *fmt1
    // mp4的read_probe() 是 mov_probe()
    // 解封装,获取基础的流信息
    main() --> stream_open() --> read_thread() --> avformat_open_input()
    --> s->iformat->read_header(s) // 获取基本的流信息,如有多少音频和视频,音视频是什么格式
    // mp4的read_header() 是 mov_read_header()
    // 获取流里面的帧
    --> ff_read_packet()
    --> s->iformat->read_packet(s, pkt)
    // mp4的read_packet() 是 mov_read_packet()
    // 解码
    AVCodec *codec
    video_thread() --> get_video_frame() --> decoder_decode_frame() --> packet_queue_get() --> avcodec_receive_frame()
    --> decode_receive_frame_internal() --> decode_simple_receive_frame() --> decode_simple_internal()
    --> avctx->codec->decode()
    ffmpeg/libavcodec/mpegaudiodec_float.c   decode_frame()
    ffmpeg/libavcodec/h264dec.c   h264_decode_frame()
    // 文件操作
    //最终的读数据接口 url.h URLProtocol 将数据读到 AVIOContext
    main() --> stream_open() --> read_thread() --> avformat_alloc_context()
    --> avformat_get_context_defaults() --> io_open_default()
    --> ffio_open_whitelist() --> ffurl_open_whitelist()
    --> ffurl_connect() --> uc->prot->url_open()
    //实际调用的地方是:
    read_thread() --> avformat_open_input() --> init_input()
    --> s->io_open()
    //读取的数据放到AVIOContext中的buffer中
    url_open            = file_open, //file.c
    ffurl_read()  ffio_geturlcontext()  AVIOContextread_packet()
    //数据流通过程
    read_probe(AVProbeData.buf) <-- avio_read(AVIOContext.buf_ptr, 2k) <-- AVFormatContext.pb
	//转码
	main() --> transcode() --> transcode_step() --> process_input() --> process_input_packet()
	--> do_streamcopy() --> output_packet() --> write_packet() --> av_interleaved_write_frame()
	--> write_packets_common() --> write_packet_common() --> write_packet() --> ff_raw_write_packet()
    --> avio_write() --> memcpy()
  1. 额外的网页资料 mp4数据流结构 《[音视频]mp4相比m3u8第一帧加载较慢的原因?》
    mp4大部分box详细介绍《mp4封装格式各box类型讲解及IBP帧计算》
    mkv大部分element详细介绍 《【多媒体封装格式详解】---MKV》cluster/block

《H.264编码格式简单分析》
《【H264/AVC 句法和语义详解】(二):h264码流格式与NALU详解一》
《H264码流和Mp4结构详解》
《H.264码流结构解析》
!!!《H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流》
!!!《MP4中提取H.264码流》
!!!《【VS开发】MP4与H.264》
《用ffmpeg从MP4中提取h.264码流》

《H264(NAL简介与I帧判断)》
《区分mp4格式里面mdat中的音频和视频数据》
!!!《MP4 mdat box解析》

测试视频下载
《Mpeg MP4 Container》
!!!《mp4所有box详解》

!!!《H264码流详细说明》
《H264码流分析》

AAC 音频格式详解

【多媒体封装格式详解】---MP4【4】
mp4文件格式解析
ffmpeg命令大全 (保存流)
Matroska文件解析之SimpleBlock

  1. ffmpeg源码分析
    //打开文件
    main() --> ffmpeg_parse_options() --> open_files() -->
    --> open_input_file() --> avformat_open_input() --> AVFormatContext *ic
    //处理流
    --> choose_decoder() --> avformat_find_stream_info()
    --> add_input_streams() --> transcode() --> transcode_step()
    --> transcode_step() --> transcode_from_filter()

Comments ( 0 )

Sign in for post a comment

About

mpeg2, h264, mp3, aac, mkv, mp4编解码 spread retract
C
Cancel

Releases

No release

Contributors

All

Activities

load more
can not load any more
C
1
https://git.oschina.net/fccyy/audio_video_codec.git
git@git.oschina.net:fccyy/audio_video_codec.git
fccyy
audio_video_codec
音视频编解码
master

Search