1. librtmp的包結構
[cpp]view plain
copy
typedef
struct
rtmppacket
rtmppacket;
packet->m_headertype: 可以定義如下:
[cpp]view plain
copy
#define rtmp_packet_size_large 0
#define rtmp_packet_size_medium 1
#define rtmp_packet_size_small 2
#define rtmp_packet_size_minimum 3
一般定位為 rtmp_packet_size_medium
[cpp]view plain
copy
#define rtmp_packet_type_audio 0x08
#define rtmp_packet_type_video 0x09
#define rtmp_packet_type_info 0x12
packet->m_hasabstimestamp: 是否使用絕對時間戳,一般定義為0。
[cpp]view plain
copy
#define stream_channel_metadata 0x03
#define stream_channel_video 0x04
#define stream_channel_audio 0x05
packet->m_ntimestamp:時間戳
音訊時間戳也可以從0開始計算,48k取樣每幀遞增21;44.1k取樣每幀遞增23。
packet->m_ninfofield2 = rtmp->m_stream_id
packet->m_nbodysize:資料報長度 = nalu包長度 + 包頭長度
packet->m_nbytesread:不用管
packet->m_chunk: 不用管
packet->m_body:包頭資料 + nalu資料,其長度為packet->m_nbodysize。
[cpp]view plain
copy
intrtmp_write_video_header(rtmp *rtmp)
[cpp]view plain
copy
"code"class
="cpp"
>
intrtmp_write_video_frame(rtmp *rtmp,
const
byte
*nalu_data,
intslice_count,
intntimestamp)
//傳送
if(rtmp_isconnected(rtmp))
} //釋放記憶體
rtmppacket_free(&packet);
return
nret;
}
4. 傳送音訊頭包
[cpp]view plain
copy
intrtmp_write_audio_header(rtmp *rtmp)
在最開始傳送一次即可。
5. 傳送音訊包
[cpp]view plain
copy
intrtmp_write_audio_data(rtmp *rtmp,
const
byte
*nalu_data,
intnalu_size,
intaudio_timestamp)
6. 本地儲存packet
[cpp]view plain
copy
intrtmp_sendpacket_wrap(rtmp_ *rtmp, rtmppacket *packet,
intqueue);
if(packet->m_packettype == rtmp_packet_type_video) else
if(packet->m_packettype == rtmp_packet_type_audio)
intlen = 0;
int_to_bytes(packet->m_nbodysize, &data[1], 3); // 3位元組 包內容長度
int_to_bytes(packet->m_ntimestamp, &data[4], 3); // 3位元組 時間戳,沒用第4位元組,太長的檔案會溢位
len += fwrite(data, 1, 11, flv_fp); // 寫入包頭11位元組
len += fwrite(packet->m_body, 1, packet->m_nbodysize, flv_fp); // 寫入資料報體
int_to_bytes(len, &data[0], 4); // 寫入的總位元組長度
fwrite(data, 1, 4, flv_fp); // 等於前tag總長度
#endif
return
rtmp_sendpacket(rtmp, packet, queue);
} 頂0
踩 0
利用LIBRTMP直播時 更改傳送資料的包大小
rtmp r 提前申請的 rtmppacket pack rtmppacket alloc pack,4 pack.m packettype rtmp packet type chunk size pack.m nchannel 0x02 pack.m headertype rtmp packet ...
利用LIBRTMP直播時 更改傳送資料的包大小
rtmp r 提前申請的 rtmppacket pack rtmppacket alloc pack,4 pack.m packettype rtmp packet type chunk size pack.m nchannel 0x02 pack.m headertype rtmp packet ...
基於 Cygwin 編譯 librtmp
由於需要在移動平台上解決基於 rtmp 協議的編譯碼,所以用到了 rtmpdump 專案下的 librtmp 不知道有沒有更好的推薦?呵呵 直接上 ndk 稍嫌麻煩,於是乎想嘗試先在 windows 平台下做一些預研,便想到直接在 cygwin 下面做了 其實在 cygwin 下面編譯 librtm...