BLACK_OX

The palest ink is better than the best memory


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

videotoolbox 硬解 H264 annexb

发表于 2023-12-07 | 分类于 ffmpeg | 评论数: | 阅读次数:
本文字数: 46k | 阅读时长 ≈ 42 分钟

Annex-b

H264有AVCC跟 Annex-b两种格式,而苹果 videotoolbox 只能针对AVCC格式的nalu 做硬解码,而且解码像素格式必须是NV12, 也叫YUV420SP
一般的mp4 都是 avcc 的 h264编码,一般硬解没问题. 而Annex-b格式视频流就必须手动解析处理。

FFMpeg

ffmepg 中 提供了一个 mp4toannexb的filter 但是 反过来的就没有,其实ffmpeg 中就针对 Annex-b格式走videotoolbox硬解做了额外处理的
总体分了两块,一块是解析 extradata中的 vps sps pps 等nal,封装为AVCDecoderConfigurationRecord | HEVCDecoderConfigurationRecord格式的data数据
另一块就是转换packet中的 nalu数据格式,然后通过 videotoolbox api 进行解码操作。 详细直接看 libavcodec/videotoolbox.c源码

videotoolbox

这里主要是通过ffmepg完成解封装操作拿到 packet,手动解析packet 跟 extra 数据 完成videotoolbox的硬解码。
跟ffmpeg不一样的就是用到最新提供的api CMVideoFormatDescriptionCreateFromH264ParameterSets | CMVideoFormatDescriptionCreateFromHEVCParameterSets。

阅读全文 »

usbcamera android 4k支持

发表于 2023-09-04 | 分类于 media | 评论数: | 阅读次数:
本文字数: 17k | 阅读时长 ≈ 15 分钟

usbcamera

android 外接 usbcamera,已经有比较成熟的技术方案UVCCamera,参考这个库,配置Andoird工程,依赖库接入,把外接usbcamera 流程跑通不难。

手头设备是海康威视的4K摄像头,run起立 camera画面也正常出来了。 如果都这么顺利的话,那就没这篇文章了 😂😂😂

4k

画面是出来了,发现分辨率最多只拉到2k(2560 x 1440),完全没有发挥出4k的能力。 比较容易想到的是 线 或者 hub 用的是usb2.0的(480Mbit/s),传输速度不够,所以出不了4K。
搞一根3.0的线 确定口子也是3.0的之后,再次跑起来,发现4k画面花了,只有顶上一点点内容,绝大部分是灰的,懵逼开始…

阅读全文 »

webrtc video流程分析

发表于 2023-03-01 | 分类于 RTC | 评论数: | 阅读次数:
本文字数: 337k | 阅读时长 ≈ 5:07

video

收集candidate之后,就可以建立好数据传输的通道了,现在通过源码走读下视频数据是如何 采集 & 编码 & 传输的

阅读全文 »

webrtc-candidate源码分析

发表于 2023-02-23 | 分类于 RTC | 评论数: | 阅读次数:
本文字数: 165k | 阅读时长 ≈ 2:30

webrtc 信令

来自ChatGPT

WebRTC(Web Real-Time Communication)是一种可以在浏览器之间实现实时音视频通信的技术。信令是 WebRTC 中的一部分,用于管理会话的建立、维护和结束。简单来说,信令是用于交换元数据以建立连接的过程。

在 WebRTC 中,需要进行一些信令交换步骤来建立连接,例如:

交换SDP(Session Description Protocol):每个端点都需要将其本地的SDP发送给对方,并且解析对方发来的SDP。
交换ICE(Interactive Connectivity Establishment)候选项:WebRTC 会在两个端点之间建立多个连接,并尝试找到最佳的连接。ICE候选项是一组网络地址和端口,用于在对等方之间建立连接。
交换网络信息:包括网络类型、带宽和网络状况等信息,以帮助双方选择最佳的连接。
以上这些步骤需要通过信令服务器来完成。信令服务器负责协调连接双方之间的通信,并确保会话能够顺利进行。

WebRTC 并没有规定信令协议,因此开发人员可以自行选择适合自己应用的协议,例如 SIP(Session Initiation Protocol)、XMPP(Extensible Messaging and Presence Protocol)或 WebSocket 等。

本文看下是如何获取ICE候选项 ice candidate

阅读全文 »

OWT-client-ios信令交互源码分析

发表于 2023-02-15 | 分类于 RTC | 评论数: | 阅读次数:
本文字数: 238k | 阅读时长 ≈ 3:36

OWT

OWT 信令交互过程:

A POST /tokens/
A SocketIO connect
A SocketIO login
A SocketIO publish
A SocketIO soac offer
A SocketIO soac candidate
Portal SocketIO soac answer

B POST /tokens/
B SocketIO connect
B SocketIO login
B SocketIO subscribe
B SocketIO soac offer
B SocketIO soac candidate
Portal SocketIO soac answer

SocketIO logout

阅读全文 »

ffmpeg源码之xx学习笔记

发表于 2023-01-16 | 分类于 ffmepg | 评论数: | 阅读次数:
本文字数: 55k | 阅读时长 ≈ 50 分钟

AVClass

1
2
3
4
5
6
7
8
9
10
11
12
13
AVFormatContext *s;
s->av_class = &av_format_context_class;

static const AVClass av_format_context_class = {
.class_name = "AVFormatContext",
.item_name = format_to_name,
.option = avformat_options,
.version = LIBAVUTIL_VERSION_INT,
.child_next = format_child_next,
.child_class_iterate = format_child_class_iterate,
.category = AV_CLASS_CATEGORY_MUXER,
.get_category = get_category,
};
阅读全文 »

ffmepg源码之http学习笔记

发表于 2022-12-22 | 分类于 ffmepg | 评论数: | 阅读次数:
本文字数: 169k | 阅读时长 ≈ 2:33

respect

致敬雷神

致敬雷神

start

从 AVFormatContext (解封装结构体) 入口开始吧 …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
libavformat/options.c

AVFormatContext *avformat_alloc_context(void)
{
FFFormatContext *const si = av_mallocz(sizeof(*si));
AVFormatContext *s;

if (!si)
return NULL;

s = &si->pub;
s->av_class = &av_format_context_class;
/// io入口
s->io_open = io_open_default;
s->io_close = ff_format_io_close_default;
s->io_close2= io_close2_default;

av_opt_set_defaults(s);

si->pkt = av_packet_alloc();
si->parse_pkt = av_packet_alloc();
if (!si->pkt || !si->parse_pkt) {
avformat_free_context(s);
return NULL;
}

si->shortest_end = AV_NOPTS_VALUE;

return s;
}
阅读全文 »

ios获取udid

发表于 2022-11-04 | 分类于 ios | 评论数: | 阅读次数:
本文字数: 24k | 阅读时长 ≈ 21 分钟

背景

苹果企业账号打包分发app,方便内部安装测试App。最近公司企业账号续费失败,申请新的企业账号没成功。(国内近2年基本没有企业申请成功)
这就蛋疼了,了解到其他app是通过多开发者账号,adhoc证书白名单的方式来做分发,adhoc证书无法解决设备数量的问题,最多100台设备,而且还要提前注册好,一年更新一次,注册设备就是要拿到设备的udid。

获取udid

了解到苹果可以通过safari以OTA(over the air)的方式拿到udid。

整体流程分三步

  1. 下发udid.mobileconfig文件
  2. 授权安装配置文件
  3. 回调解析xml拿到udid


阅读全文 »

MP4笔记

发表于 2022-10-28 | 分类于 media , h264 | 评论数: | 阅读次数:
本文字数: 9.4k | 阅读时长 ≈ 9 分钟

MP4

阅读全文 »

H264笔记

发表于 2022-10-26 | 分类于 media | 评论数: | 阅读次数:
本文字数: 7.9k | 阅读时长 ≈ 7 分钟

H264

H264是视频编码规范,在这个规范下H264码流有两种方式:AnnexB格式 && AVCC格式

AnnexB

AnnexB 的原理是在每个 NALU 前面写上一个特殊的起始码,通过这个起始码来当做 NALU 的分隔符,从而分割每个 NALU

[start code] NALU [start code] NALU [start code] NALU

AVCC

avcC 则采用了另外一种方式。那就是在 NALU 前面写上几个字节,这几个字节组成一个整数(大端字节序)这个整数表示了整个 NALU 的长度

[extra data] [length] NALU [length] NALU [length] NALU
阅读全文 »
12…4
BLACK_OX

BLACK_OX

Developer...
34 日志
10 分类
22 标签
RSS
GitHub E-Mail
© 2023 BLACK_OX | 497k | 7:32
由 Hexo 强力驱动
|
主题 – NexT.Gemini
|