分析視頻流
stream[0]
- duration = 2019840 // 視頻的時長時間戳,計算秒 2019840/12800
- index = 0 // 流索引,這是一個視頻流
- nb_frames // 視頻的總幀數
- avg_frame_rate // 視頻的幀數, num/den就是幀數
- timebase = {1, 12800} // 視頻流的時間基
- first_dts = -1024 // 第一幀的dts
- cur_dts = 當前幀的dts
- codecpar
- codec_type = AVMEDIA_TYPE_VIDEO // 編碼器的類型
- codec_id = AV_CODEC_ID_H264 // 編碼格式
- bit_rate = 252212 // 比特率
- width = 1920 // 寬
- height = 1080 // 高
- format = 0 // 顏色格式,0是yuv420p
- profile = 77
- level = 40
stream[0]的Packet(包數據)
- pts = 這一個packet的pts,也就是當前的時間戳
- dts = 值一個packet的dts,這是解碼時間戳
- duration = 1024 # 這一個包所占用的時間戳
- data = 這一個包的數據
- flags = 1 // 表示域,flags=1的話就是關鍵幀的意思
- stream_index = 1 # 代表這個包屬於音頻還是視頻的index
- pos = 129410 # 代表示流媒體的偏移量
- size = 1024 # 代表數據的大小
stream[0]的Stream(解碼后幀的數據)
-
data = 解碼后的流數據
- 對於packed格式的數據(例如RGB24),會存到data[0]里面。
- 對於planar格式的數據(例如YUV420P),則會分開成data[0],data[1],data[2]...(YUV420P中data[0]存Y,data[1]存U,data[2]存V)
-
linsize = 每一行的數據大小
-
key_frames = 1 // 是否是關鍵幀 , 如果是音頻一定是關鍵幀
-
pts = 0 // 時間戳,解碼之后的,編碼之前需要自己進行定義
-
width = 1920 // 圖像的寬度
-
height = 1080 // 圖像的高度
-
format = 0 // 圖像的格式 yuv420p
-
pict_type = AV_PICTURE_I // 圖像的幀類型,這個是I幀的意思
- AV_PICTURE_TYPE_I I幀
- AV_PICTURE_TYPE_B B幀
- AV_PICTURE_TYPE_P P幀
- ...
-
pkt_size = 78000 // 包的大小
分析音頻流數據
stream[1]
- index =1 // 流索引,這是一個音頻流
- duration = 7576560 // 音頻的總時間戳
- time_base = {1, 48000} // 音頻流的時間基
- nb_frames = 7400 // 音頻一共7400幀, 一秒 47幀左右, 一秒采樣48000次,那么每一幀采樣的大小決定了音頻的實際幀數
- first_dts = -1024 // 第一幀的dts
- cur_dts = 當前幀的dts
- codecpar
- codec_type = AVMEDIA_TYPE_AUDIO // 音頻類型
- codec_id = AV_CODEC_ID_AAC // 編碼格式:AAC
- format = 8 // 音頻的采樣格式AV_SAMPLE_FMT_FLTP
- bit_rate = 126772 // 比特率 126772
- channel_layout = 3 // 音頻的通道的存儲順序
- channels = 2 // 音頻的通道數
- sample_rate = 48000 // 音頻的采樣率
- frame_size = 1024 // 每一幀的PTS量
stream[1]的Packet(包數據)
- pts = 這一個packet的pts,也就是當前的時間戳
- dts = 值一個packet的dts,這是解碼時間戳
- duration = 1024 # 這一個包所占用的時間
- data = 這一個包的數據
- flags = 1 // 表示域,flags=1的話就是關鍵幀的意思
- stream_index = 1 # 代表這個包屬於音頻還是視頻的index
- pos = 129410 # 代表示流媒體的偏移量
- size = 1024 # 代表數據的大小
stream[1]的Stream(解碼后幀的數據)
-
data = 解碼后的流數據,視頻是yuv,rgb,音頻是PCM數據
-
linesize = data中一行數據的大小
-
nb_samples = 音頻中一個AVFrame這里標記包含了多少個采樣數值
-
format = 8 //解碼后的原始數值
-
key_frame = 1 // 是否是關鍵幀,音頻都是1
-
pts = 顯示時間戳
-
sample_rate = 48000 // 采樣率
-
channel_layout = 3 //
-
data = 解碼后的流數據
- 對於packed格式的數據(例如RGB24),會存到data[0]里面。
- 對於planar格式的數據(例如YUV420P),則會分開成data[0],data[1],data[2]...(YUV420P中data[0]存Y,data[1]存U,data[2]存V)
-
linsize = 每一行的數據大小
-
nb_samples = 1024 // 音頻數據一幀使用1024個采樣率
-
format = 8 // AV_SAMPLE_FMT_FLTP
-
key_frames = 1 // 是否是關鍵幀 , 如果是音頻一定是關鍵幀
-
pts = 0 // 時間戳,解碼之后的,編碼之前需要自己進行定義i
-
pkt_size = 78698 // 數據的大小