小编Chr*_*ger的帖子

MBProgressHUD顶部显示的UITableView标题

所以我有一个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?

谢谢!

iphone objective-c uitableview ios mbprogresshud

28
推荐指数
2
解决办法
6010
查看次数

如何使用Xcode 5将预编译的静态库的调试符号与源代码进行匹配?

我必须使用外部构建脚本编译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设置源映射的问题但是我不太清楚要做什么... …

xcode ffmpeg ios lldb xcode5

6
推荐指数
1
解决办法
2733
查看次数

从AVAssetWriter读取实时H.264输出时数据损坏

我正在使用一些技巧来尝试在写入磁盘时读取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

5
推荐指数
1
解决办法
3595
查看次数

使用FFmpeg的libavformat API使用直接流副本创建的文件以3600 fps的速度播放得太快

我正在研究一个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 h.264 libavcodec libav libavformat

5
推荐指数
1
解决办法
1665
查看次数