Problems with Youtube

Help
2009-10-22
2014-05-09
1 2 > >> (Page 1 of 2)
  • cavetroll74
    cavetroll74
    2009-10-22

    Hi there

    I have a problem and I hope somebody can help me out. I am running Ubuntu 9.04 server 64-bit. I recently compiled and installed mediatomb0.12 using this guide: http://wiki.flexion.org/InstallingMediaTomb012.html
    I m having problems with my youtube configuration, though. I can t get my playlists or other things to show up in the database. It just keeps showing my Favourites and one video the is Rated 4 stars. It just keeps showing the default categories, I guess.
    As far as Youtube playback is concerned, I`m getting the following error in mediatomb.log: ERROR: Failed to get URL for video with id (step 1)youtube_gdata

    I am streaming data through a PS3 but whenever I tell it to play Youtube clips, it gives me a network errror. Other online content like Apple Trailers works fine.

    Thanks for your help.

     
  • Greg Smith
    Greg Smith
    2009-11-05

    I have the exact same problem.

    It appears to be a change in the RSS feed from youtube, preventing the XML parser from finding the correct link. I'm going through the code to try to find an easy fix.

     
  • Greg Smith
    Greg Smith
    2009-11-05

    I've fixed part of the problem, inserting the 3  lines below into the function Ref<CdsObject> YouTubeContentHandler::getNextObject() in file youtube_content_handler.cc around line 220.

            //existing code
            item->setURL(temp);
       
            //new code
            int amp = temp.index('&');
            if (amp > 0 )
                 temp = temp.substring( 0, amp );
       
            // existing code   
            int eq = temp.rindex('=');
            if (eq > 0 )
                 temp = temp.substring(eq + 1);

    It now properly parses the the video id, populates the db and creates the proper URL requests. However, the response returned from youtube no longer contains the data mediatomb expects, so playing the the video still fails.

     
  • cavetroll74
    cavetroll74
    2009-11-05

    Thanks for your answer! That seems to work well. It's unfortunate that the playback still doesn't work, though :(
    A similar problem with the database seems to exist with Apple Trailers. "All Trailers" are there but the categories appear only randomly and are almost empty. Any suggestions?

     
  • Greg Smith
    Greg Smith
    2009-11-07

    OK I've got youtube videos to play. First, forgive me if this answer sucks. I don't normally code for linux or in C++ (or ever dealt with regex or JSON)
    Someone who knows what they're doing could probably flesh this out so it makes sense (such as adding the json dependecies via configure)

    First, compile and install libjson (http://jsoncpp.sourceforge.net/)

    Copy the include files from jsoncpp/include/json to mediatomp/src/json. (You can also copy the libjson*.a to that folder to.)

    Then add the reference to libjson to your existing makefile ( mediatomb/build/Makefile)

        mediatomb_LDADD = \
        libmediatomb.a \
        $(top_srcdir)/tombupnp/build/libtombupnp.a \
        $(top_srcdir)<--path to--->/libjson_linux-gcc-4.4.1_libmt.a \
        $(LIBEXIF_LDFLAGS) \
        .
        .

    Then I changed mediatomb/src/youtube_video_url.cc

      
        43a44
        > #include "json/json.h"
        47c48
        < #define YOUTUBE_URL_PARAMS_REGEXP   "var swfArgs =.*\"t\": \"(+)\""
        --
        > #define YOUTUBE_URL_PARAMS_REGEXP   "SWF_ARGS.*\\}"
        51a53,54
        > #define YOUTUBE_URL_PARAM_L         "l"
        > #define YOUTUBE_URL_PARAM_SK        "sk"
        80a84,86
        >     Json::Value root;
        >     Json::Reader reader;
        >
        89a96,97
        >    
        >
        108a117
        >    
        109a119
        >
        112c122,128
        <         params = trim_string(matcher->group(1));
        --
        >         params = trim_string( matcher->group( 0 ) );
        >         int brace = params.index( '{' );
        >         if ( brace > 0 )
        >             params = params.substring( brace );
        >         brace = params.index( '}' );
        >         if ( brace > 0 )
        >             params = params.substring( 0, brace + 1 );
        119,120c135,140
        <     params = _(YOUTUBE_URL_GET) + YOUTUBE_URL_PARAM_VIDEO_ID + '=' +
        <              video_id + '&' + YOUTUBE_URL_PARAM_T + '=' + params;
        --
        >     bool parsingSuccessful = reader.parse( params.c_str(), root );
        >    
        >     params = _(YOUTUBE_URL_GET) + YOUTUBE_URL_PARAM_VIDEO_ID + '=' + video_id +
        >              '&' + YOUTUBE_URL_PARAM_L  + '=' + root.get("l" , "" ).asCString() +
        >              '&' + YOUTUBE_URL_PARAM_SK + '=' + root.get("sk", "" ).asCString() +
        >              '&' + YOUTUBE_URL_PARAM_T  + '=' + root.get("t" , "" ).asCString();

    Then go through the normal make, sudu make install steps and run.

    Note this doesn't detect mp4 files.

    Again I'm sorry these steps are so bad, I hope someone can make them better. I'm just happy I can watch Charlie the Unicorn on my TV!

    I'll look into the apple trailers next

    Good luck

     
  • Greg Smith
    Greg Smith
    2009-11-10

    I haven't been able to reproduce the problems with apple trailers, so I'm not sure if can help with that problem. sorry.

     
  • Greg Smith
    Greg Smith
    2009-11-11

    cavetroll,

    I looked at the code some more. Your best bet is to start mediatomb up in debug mode ( -D ), and specify a log file ( -l logfile) then when you start losing categories, check the file for any errors when refreshing content.

     
  • cavetroll74
    cavetroll74
    2009-11-11

    Hi

    Sorry for my late reply!
    I have to admit that your Youtube solution is a bit over my head ;) Maybe I find some time over the weekend to look into it. Many thanks for that!
    The fact that the Apple Trailers disappear is quite strange. It seems to be random. They come in fine when I blow away the database and re-import. After 1 or 2 days the categories simply disappear. I can see everything in the AllTrailers-section, though. I'll follow your advice and try to debug mediatomb. I'll keep you posted.
    Again, thanks for your great help!

     
  • SSamiK
    SSamiK
    2009-11-18

    Is this fixed in SVN?

     
  • Greg Smith
    Greg Smith
    2009-11-18

    I hope not (at least not using the above code) It's not some of my best work :)

    There's no documentation about the need for jsoncpp. The regex really needs to work better.

    Also there should be a check to see if an HD version is available.

    The code works but not well. If I ever get some more free time, I'll revisit it to make it correct.

     
  • Jin
    Jin
    2009-12-03

    I just got back from my "car restoration holidays" and also got informed that YT is broken. I'll have a look at it…

     
  • Jin
    Jin
    2010-01-08

    Please test latest SVN, YT should again be working starting with revision 2043.

    I still have something on my TODO list, I need to add more formats, to allow better format selection from config.xml, but apart from that the old functionality should be restored now.

     
  • Greg Smith
    Greg Smith
    2010-01-10

    It works for me. Thanks!

     
  • Jin
    Jin
    2010-01-10

    > Also there should be a check to see if an HD version is available.

    Btw that should work, could you please check that as well?

     
  • Greg Smith
    Greg Smith
    2010-01-13

    It doesn't appear to work.

    I'll have to verify it's not my problem, but the network traces show we're requesting fmt=18, even when 'IS_HD_AVAILABLE': true.

    I'll let you know what I find.

     
  • Greg Smith
    Greg Smith
    2010-01-13

    I guess I should verify I have the correct config.

    I should have:

    format="mp4" and hd="yes"

    in my youtube setting, right? I'm thinking the hd part could be wrong???

    thanks

     
  • Jin
    Jin
    2010-01-13

    Yes, your config looks OK, so it's very well possible that the HD part is broken. I anyway need to add more formats…

    I did not yet had time to test it properly, I fixed it on a mobile connection and want to retest it when I am at something that has more bandwidth, so it could still be buggy.

     
  • Greg Smith
    Greg Smith
    2010-01-13

    It appears to be an issue with the regex matcher .which I really need to learn someday.

    Anyway, the line to match is

    …'IS_HD_AVAILABLE': true,

    the current regex  "IS_HD_AVAILABLE *: *(*);" and doesn't match.

    I tried "IS_HD_AVAILABLE': *" which matches, but fails the later comparison to "true", probably because of the trailing comma. What should I be trying?

    thanks again

     
  • Jin
    Jin
    2010-01-13

    Please try svn revision 2053, it looks like I simply forgot to update the regular expression for HD content :)

    Btw I also have a hard time with regular expressions, our RExp class is simply a wrapper around regex.h

     
  • Greg Smith
    Greg Smith
    2010-01-13

    That works!

    fmt=22 is requested and the video.mp4 file download is started.

    My directv box chokes on it, but the PS3 plays it just fine.

    Thanks for all your work.

     
  • Jin
    Jin
    2010-01-14

    Can you please retest with revisoin 2055? Some guys reported that it did not compile on their systems, gcc did not like the escaped comma in the regexp for some reason, I removed the escaping but i do not know if it breaks the regexp when searching for the HD value…..

     
  • Greg Smith
    Greg Smith
    2010-01-15

    Yes, The HD detection still works.

    Thanks

     
  • Eonic
    Eonic
    2010-01-15

    Hello, I'm not sure if this is the proper place to add my issue with compiling revision 2055. I am trying because I want youtube to work, though. Using gcc 4.3.2, I get the following something like this:

    x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I.. -I../tombupnp/upnp/inc    -I../src -I../tombupnp/ixml/inc -I../tombupnp/threadutil/inc -I../tombupnp/upnp/inc -I..  -I/usr/include/mysql -DHAVE_ERRNO_AS_DEFINE=1 -I/usr/include/js -I/usr/include/taglib       -pthread       -I/usr/include -I/usr/include -DDVDNAV_USES_EXTERNAL_DVDREAD -O2 -march=native -pipe -MT libmediatomb_a-ffmpeg_handler.o -MD -MP -MF .deps/libmediatomb_a-ffmpeg_handler.Tpo -c -o libmediatomb_a-ffmpeg_handler.o `test -f '../src/metadata/ffmpeg_handler.cc' || echo './'`../src/metadata/ffmpeg_handler.cc
    mv -f .deps/libmediatomb_a-extractor_handler.Tpo .deps/libmediatomb_a-extractor_handler.Po
    x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I.. -I../tombupnp/upnp/inc    -I../src -I../tombupnp/ixml/inc -I../tombupnp/threadutil/inc -I../tombupnp/upnp/inc -I..  -I/usr/include/mysql -DHAVE_ERRNO_AS_DEFINE=1 -I/usr/include/js -I/usr/include/taglib       -pthread       -I/usr/include -I/usr/include -DDVDNAV_USES_EXTERNAL_DVDREAD -O2 -march=native -pipe -MT libmediatomb_a-metadata_handler.o -MD -MP -MF .deps/libmediatomb_a-metadata_handler.Tpo -c -o libmediatomb_a-metadata_handler.o `test -f '../src/metadata_handler.cc' || echo './'`../src/metadata_handler.cc
    ../src/metadata/ffmpeg_handler.cc: In member function 'virtual zmm::Ref<IOHandler> FfmpegHandler::serveContent(zmm::Ref<CdsItem>, int, off_t*)':
    ../src/metadata/ffmpeg_handler.cc:295: error: 'video_thumbnailer_create' was not declared in this scope
    ../src/metadata/ffmpeg_handler.cc:296: error: 'video_thumbnailer_create_image_data' was not declared in this scope
    ../src/metadata/ffmpeg_handler.cc:317: error: 'video_thumbnailer_generate_thumbnail_to_buffer' was not declared in this scope
    ../src/metadata/ffmpeg_handler.cc:329: error: 'video_thumbnailer_destroy_image_data' was not declared in this scope
    ../src/metadata/ffmpeg_handler.cc:330: error: 'video_thumbnailer_destroy' was not declared in this scope
    mv -f .deps/libmediatomb_a-metadata_handler.Tpo .deps/libmediatomb_a-metadata_handler.Po
    make: ***  Error 1
    make: *** Waiting for unfinished jobs….
    mv -f .deps/libmediatomb_a-config_manager.Tpo .deps/libmediatomb_a-config_manager.Po

    Any ideas?

     
  • Eonic
    Eonic
    2010-01-15

    I removed dvd support and it compiled. Just as well really, I've not had time to properly debug that, but reading from dvd's kept crashing my mediatomb anyway. Probably because I had to install some packages which were markes as masked/unstable.

    Anyway, now YouTube works. Excellent stuff, Jin. :-)

     
  • Eonic
    Eonic
    2010-01-16

    Actually, YouTube playback for me is very jittery (a lot of lag) even without hd="yes".  I'm using these settings:

    <YouTube enabled="yes" hd="no" format="mp4" refresh="28800" update-at-start="yes" purge-after="604800" racy-content="exclude">

    I'm serving the content to my PS3 and have disabled transcoding for flv data.

     
1 2 > >> (Page 1 of 2)