所以我有一个UITableViewController的子类,它从加载一些数据并在加载过程中使用MBProgressHUD.我使用标准的MBProgressHUD初始化.
HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
[HUD show:YES];
Run Code Online (Sandbox Code Playgroud)
这是结果:
.
有没有办法解决这个问题,还是我应该放弃MBProgressHUD?
谢谢!
我必须使用外部构建脚本编译FFmpeg for iOS ,但是当我调试时,如果我深入研究libavformat库函数,我会看到汇编程序:
0x109a73: cmpl $0, 1192(%ebp)
0x109a7a: jns 0x109a86 ; mov_write_header + 198 at movenc.c:3539
0x109a7c: movl $1, 1192(%ebp)
0x109a86: movl 16(%ebp), %eax
0x109a89: cmpl $0, 84(%eax)
0x109a8d: movl %edx, %ecx
0x109a8f: jne 0x109ad9 ; mov_write_header + 281 at movenc.c:3548
0x109a91: testb $2, 48(%ecx)
0x109a95: jne 0x109ac1 ; mov_write_header + 257 at movenc.c:3541
Run Code Online (Sandbox Code Playgroud)
有一些清晰的调试符号可以让我相信应该有一些方法告诉Xcode这个源代码的位置,以便于调试.
这甚至可能吗?
编辑:我在这里找到了一个相关的问题Xcode 4中没有外部库的符号/来源
因此,当我跑步时,xcrun dwarfdump libavformat.a | grep "\.c"我得到一堆这样的结果:
AT_decl_file( "libavformat/movenc.c" )
Run Code Online (Sandbox Code Playgroud)
所以我尝试将相关的源文件放在相对于.a文件和我的.xcodeproj文件的文件夹中,但这两种方法都不起作用.完整源代码可在此处获得:https://github.com/openwatch/livestreamer-ios
edit2:我发现了另一个关于如何为lldb设置源映射的问题但是我不太清楚要做什么... …
我正在使用一些技巧来尝试在写入磁盘时读取AVAssetWriter的原始输出.当我通过连接它们重新组装单个文件时,生成的文件与AVAssetWriter的输出文件具有相同的确切字节数.但是,重新组装的文件将无法在QuickTime中播放或由FFmpeg解析,因为存在数据损坏.这里和那里的几个字节已经改变,使得结果文件无法使用.我假设这发生在每次读取的EOF边界上,但它不是一致的损坏.
我计划最终使用与此类似的代码从编码器中解析出单个H.264 NAL单元以将它们打包并通过RTP发送它们,但是如果我不相信从磁盘读取的数据,我可能不得不使用另一种解决方案.
是否有解释/修复此数据损坏?您是否有任何其他资源/链接可以解析如何解析NAL单元以通过RTP进行打包?
完整代码:AVAppleEncoder.m
// Modified from
// http://www.davidhamrick.com/2011/10/13/Monitoring-Files-With-GCD-Being-Edited-With-A-Text-Editor.html
- (void)watchOutputFileHandle
{
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
int fildes = open([[movieURL path] UTF8String], O_EVTONLY);
source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE,fildes,
DISPATCH_VNODE_DELETE | DISPATCH_VNODE_WRITE | DISPATCH_VNODE_EXTEND | DISPATCH_VNODE_ATTRIB | DISPATCH_VNODE_LINK | DISPATCH_VNODE_RENAME | DISPATCH_VNODE_REVOKE,
queue);
dispatch_source_set_event_handler(source, ^
{
unsigned long flags = dispatch_source_get_data(source);
if(flags & DISPATCH_VNODE_DELETE)
{
dispatch_source_cancel(source);
//[blockSelf watchStyleSheet:path];
}
if(flags & DISPATCH_VNODE_EXTEND)
{
//NSLog(@"File size changed");
NSError *error = nil;
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingFromURL:movieURL error:&error];
if (error) {
[self …Run Code Online (Sandbox Code Playgroud) objective-c nsdata h.264 grand-central-dispatch avassetwriter
我正在研究一个libavformat API包装器,它将带有H.264和AAC的MP4文件转换为适合流式传输的MPEG-TS段.我只是在没有重新编码的情况下进行简单的流复制,但我生成的文件以3600 fps而不是24 fps 播放视频.
以下是ffprobe https://gist.github.com/chrisballinger/6733678的一些输出,损坏的文件如下:
r_frame_rate=1/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=2999
duration=0.033322
Run Code Online (Sandbox Code Playgroud)
通过ffmpeg手动发送的相同输入文件具有正确的时间戳信息:
r_frame_rate=24/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=126000
start_time=1.400000
duration_ts=449850
duration=4.998333
Run Code Online (Sandbox Code Playgroud)
我认为这个问题存在于我的libavformat设置中:https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349我在那里重新利用了ffmpeg.c中的一堆代码,这是必需的用于直接流复制.
由于3600看起来像一个"神奇的数字"(60*60),它可能就像我没有正确设置时间尺度一样简单,但我无法弄清楚我的代码与ffmpeg/avconv本身的分歧.
类似的问题在这里,但我认为他们没有达到我的目的:使用libavformat与vcopy/acopy混合使用H.264附件B和AAC流
ffmpeg ×2
h.264 ×2
ios ×2
objective-c ×2
iphone ×1
libav ×1
libavcodec ×1
libavformat ×1
lldb ×1
nsdata ×1
uitableview ×1
xcode ×1
xcode5 ×1